本人安卓小白,公司最近项目需要用到不同的类型的用户注册,周末下午写完记录一下。

网上找了一堆没有适合自己的(或者说我没找到),写的比较基础,欢迎大家多多指导。

老规矩,先上效果图

网上在线合成的GIF图,哪位大神有比较好的合成图方法一定告诉我。

先说思路:

1.使用Spinner组件实现下拉列表;

2.监听Spinner的ID实现切换Fragment。

简单的activity_main.xml布局

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:orientation="vertical"
  8. tools:context=".SpinnerMainActivity">
  9.  
  10. <TextView
  11. android:layout_width="match_parent"
  12. android:layout_height="wrap_content"
  13. android:gravity="center"
  14. android:text="账号注册"
  15. android:textSize="20sp"
  16.  
  17. />
  18.  
  19. <Spinner
  20. android:id="@+id/spinnr"
  21. android:layout_width="match_parent"
  22. android:layout_height="wrap_content"
  23. android:layout_gravity="center"
  24. android:entries="@array/cars"
  25. android:theme="@style/Spinner">
  26.  
  27. </Spinner>
  28.  
  29. <LinearLayout
  30. android:id="@+id/ll_fragment"
  31. android:layout_width="match_parent"
  32. android:layout_height="match_parent"
  33. android:orientation="vertical">
  34.  
  35. </LinearLayout>
  36.  
  37. </LinearLayout>

Spinner 自定义的字体大小,颜色,在layout下创建的布局:personal_spinner.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TextView xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. android:gravity="left"
  6. android:padding="5dip"
  7. android:textColor="#000000"
  8. android:textSize="20sp" />

我在这里使用的是Spinner 的静态加载,在valuse下创建arrays.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <string-array name="cars">
  4. <item>请选择您的账号注册类型</item>
  5. <item>个人VIP用户注册</item>
  6. <item>绿道司机用户注册</item>
  7. </string-array>
  8. </resources>

这里说一下默认加载数据的字体比较下,在valuse下的styles.xml加上自己需要的字体大小和颜色

  1. <resources>
  2.  
  3. ......
  4. <style name="Spinner" parent="Widget.AppCompat.Light.DropDownItem.Spinner">
  5. <item name="android:paddingStart">0dp</item>
  6. <item name="android:paddingEnd">0dp</item>
  7. <item name="android:textColor">@color/colorhei</item>
  8. <item name="android:textSize">20sp</item>
  9. </style>
  10. </resources>

因为Spinner默认会自动加载,网上说了一些方法我试了一下,达不到我想要的效果,所以我直接写了3个Fragment,默认加载的第一个Fragment布局就写一个Textview,内容和第一个item一样,就做一个提示的效果,第二个和第三个Fragment布局才写完整的UI

上代码

这是第一个空的fragment布局

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="vertical"
  7. tools:context="com.lvdaoproject.xialademo.FragmentDriver">
  8.  
  9. <TextView
  10. android:layout_width="wrap_content"
  11. android:layout_marginLeft="5dp"
  12. android:layout_height="wrap_content"
  13. android:text="请选择您的账号注册类型"
  14. android:textSize="20sp" />
  15. </LinearLayout>

第一个fragment 代码

  1. package com.lvdaoproject.xialademo;
  2.  
  3. import android.app.Fragment;
  4. import android.os.Bundle;
  5. import android.support.annotation.NonNull;
  6. import android.support.annotation.Nullable;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10.  
  11. public class FragmentNull extends Fragment {
  12. public FragmentNull() {
  13.  
  14. }
  15.  
  16. @Nullable
  17. @Override
  18. public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  19.  
  20. View view = inflater.inflate(R.layout.fragmeng_null, container, false);
  21. return view;
  22. }
  23.  
  24. @Override
  25. public void onActivityCreated(@Nullable Bundle savedInstanceState) {
  26. super.onActivityCreated(savedInstanceState);
  27. }
  28.  
  29. }

第二个第三个fragment就是布局根据自己的需要写了而已,就不一一粘贴了。

下面粘贴MainActivity代码

  1. package com.lvdaoproject.xialademo;
  2.  
  3. import android.app.FragmentManager;
  4. import android.app.FragmentTransaction;
  5. import android.os.Bundle;
  6. import android.support.v7.app.AppCompatActivity;
  7. import android.view.View;
  8. import android.view.Window;
  9. import android.widget.AdapterView;
  10. import android.widget.ArrayAdapter;
  11. import android.widget.LinearLayout;
  12. import android.widget.Spinner;
  13.  
  14. public class SpinnerMainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
  15.  
  16. private Spinner spinner;
  17. private ArrayAdapter adapter;
  18. private LinearLayout ll_fragment;
  19. private FragmentDriver fragmentDriver;
  20. private FragmentPersonVip fragmentPersonVip;
  21. private FragmentNull fragmentNull;
  22.  
  23. @Override
  24. protected void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
  27. setContentView(R.layout.activity_main);
  28.  
  29. init();
  30. }
  31.  
  32. private void init() {
  33. spinner = findViewById(R.id.spinnr);
  34. ll_fragment = findViewById(R.id.ll_fragment);
  35.  
  36. //设置ArrayAdapter内置的item样式-这里是自定义显示样式
  37. adapter = ArrayAdapter.createFromResource(SpinnerMainActivity.this, R.array.cars, R.layout.personal_spinner);
  38.  
  39. //这里设置的是Spinner的样式
  40. adapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
  41.  
  42. //设置Adapter了
  43. spinner.setAdapter(adapter);
  44.  
  45. //监听Spinner的操作
  46. spinner.setOnItemSelectedListener((AdapterView.OnItemSelectedListener) this);
  47. }
  48.  
  49. @Override
  50. //选取时候的操作
  51. public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
  52. if (id == 0) {
  53. setFragmentNull();
  54. }
  55. if (id == 1) {
  56. setmFragmentPersonVip();
  57. }
  58. if (id == 2) {
  59.  
  60. setmFragmentDriver();
  61. }
  62. }
  63.  
  64. @Override
  65. //没被选取时的操作
  66. public void onNothingSelected(AdapterView<?> parent) {
  67.  
  68. }
  69.  
  70. private void setFragmentNull() {
  71. //判断fragmentMan是否为空,无则创建fragment对象
  72. if (fragmentNull == null) {
  73. fragmentNull = new FragmentNull();
  74. }
  75. //创建FragmentManager对象
  76. FragmentManager manager = getFragmentManager();
  77. //创建FragmentTransaction事务对象
  78. FragmentTransaction fragmentTransaction = manager.beginTransaction();
  79. //使用replace(将要替换位置的i的,替换的页面)方法实现页面的替换
  80. fragmentTransaction.replace(R.id.ll_fragment, fragmentNull);
  81. //提交事务
  82. fragmentTransaction.commit();
  83. }
  84.  
  85. private void setmFragmentDriver() {
  86. //判断fragmentMan是否为空,无则创建fragment对象
  87. if (fragmentDriver == null) {
  88. fragmentDriver = new FragmentDriver();
  89. }
  90. //创建FragmentManager对象
  91. FragmentManager manager = getFragmentManager();
  92. //创建FragmentTransaction事务对象
  93. FragmentTransaction fragmentTransaction = manager.beginTransaction();
  94. //使用replace(将要替换位置的i的,替换的页面)方法实现页面的替换
  95. fragmentTransaction.replace(R.id.ll_fragment, fragmentDriver);
  96. //提交事务
  97. fragmentTransaction.commit();
  98. }
  99.  
  100. private void setmFragmentPersonVip() {
  101. //判断fragmentMan是否为空,无则创建fragment对象
  102. if (fragmentPersonVip == null) {
  103. fragmentPersonVip = new FragmentPersonVip();
  104. }
  105. //创建FragmentManager对象
  106. FragmentManager manager = getFragmentManager();
  107. //创建FragmentTransaction事务对象
  108. FragmentTransaction fragmentTransaction = manager.beginTransaction();
  109. //使用replace(将要替换位置的i的,替换的页面)方法实现页面的替换
  110. fragmentTransaction.replace(R.id.ll_fragment, fragmentPersonVip);
  111. //提交事务
  112. fragmentTransaction.commit();
  113. }
  114. }

在这里补充一下,Fragment我本来导的是v4的包,结果

  1. //使用replace(将要替换位置的i的,替换的页面)方法实现页面的替换
  2. fragmentTransaction.replace(R.id.ll_fragment, fragmentPersonVip);

这一行第二个参数报错,也就是"fragmentPersonVip"这个小子

后来我把Fragment 的包换成import android.app.Fragment;就好了

好了,就写这么多,刚刚开始写博客,写得不好的请大家多多指教,谢谢!

  1.  

Spinner之下拉多选,监听ID后显示不同Frgment页面的更多相关文章

  1. 9、JcomboBox下拉框事件监听

    9.JcomboBox下拉框事件监听 JComboBox()的事件监听类ItemListener.其范例代码如下: import java.awt.*; import java.awt.event.* ...

  2. Django进入监听端口就自动打开指定页面,无需导航栏手动添加(Django六)

    在我们进入监听端口时画面如下:而因为在urls.py中写过如下语句 我们在监听端口后加上/login就会跳转到login.html页面,如下图 那么如何一打开监听端口就可以走动跳转到login.htm ...

  3. js 监听后退事件及跳转页面

    //直接跳转 window.location.href="b.html"; //返回上一级页面 window.history.back(-1); //返回下一级页面 window. ...

  4. React-Native传值方式之 :DeviceEventEmitter添加监听控制并传值到其他页面

    在 native 开发中,我们可以使用广播实现事件的订阅和事件的触发,从而实现不在该页面但是可以调用该页面的方法. 在 React Native 中,我们也可以使用 DeviceEventEmitte ...

  5. vue 弹窗时 监听手机返回键关闭弹窗(页面不跳转)

    [注]:  popstate 事件 a.当活动历史记录条目更改时,将触发popstate事件. b.如果被激活的历史记录条目是通过对history.pushState()的调用创建的,或者受到对his ...

  6. bootstrap 之下拉多选

    效果如图: 一.HTML代码 <label class="col-sm-1 control-label text-right" for="ds_host" ...

  7. Bootstrap 学习笔记8 下拉菜单滚动监听

    代码部分: <nav class="navbar navbar-default"> <a href="#" class="navba ...

  8. element UI 下拉菜单滚动监听(vue指令)

    直接看代码吧,可以直接粘贴此代码到你的编辑器中看效果. <template> <div class="page-component"> <div cl ...

  9. angular6 监听url查询参数变化刷新页面

    快照snapshot取到的参数是组件第一次渲染时候的参数,当我们在页面中需要根据不同的url查询参数显示不同的内容时,快照就不能满足我们的需要了,这时候就要用ActivatedRoute服务的quer ...

随机推荐

  1. java游戏开发杂谈 - 实现游戏主菜单

    经常玩游戏的同学,大家都知道,游戏都会有个主菜单,里面有多个菜单选项:开始游戏.游戏设置.关于游戏.退出游戏等等,这个菜单是怎么实现的呢. 有一定桌面软件开发基础的同学可能会想到,用JButton组件 ...

  2. formidable处理node.js的post请求

    前言 我们都知道在node.js中,我们最常用的请求方式是get和post.其中get请求和URL相关,通过解析URL我们可以直接获取到请求的参数.但是post请求不同,post请求是包含在请求体中, ...

  3. Python 中的设计模式详解之:策略模式

    虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中“不见了,或者简化了”. ...

  4. SpringBoot系列——利用系统环境变量与配置文件的分支选择实现“智能部署”

    前言 通过之前的博客:SpringBoot系列——jar包与war包的部署,我们已经知道了如果实现项目的简单部署,但项目部署的时候最烦的是什么?修改成发布环境对应的配置!数据库连接地址.Eureka注 ...

  5. Unity的UI究竟为什么可以合批

    1.UI/Default代码研究首先,我想到的是,既然是对图集纹理进行采样,而且又不能统一更改材质的纹理UV值,我们通常写的shader都是直接根据模型UV值对主纹理进行采样,那会不会是shader中 ...

  6. JAVA的特性

    JAVA有三大特性:封装,继承和多态 一. 封装 封装就是将类的信息隐藏在类内部,不允许外部程序直接访问,而是通过该类的方法实现对隐藏信息的操作和访问. 封装的实现 a. 需要修改属性的访问控制符(修 ...

  7. Android音视频之AudioTrack播放音频(二)

    前一篇讲了如何录制wav音频文件,本篇就来讲讲如何播放wav文件,这里就是使用AudioTrack来播放音频,确切的说是播放pcm格式数据,使用AudioTrack播放也没什么难度,主要就是将数据写入 ...

  8. 底部导航栏-----FragmentTabHost

    [说明] 1.主界面上添加父容器:FragmentTabHost 属于v4兼容包 需要指定该id为android:id/tabhost,不能修改,表示由android系统来托管这个id. 本身是一个F ...

  9. Windows Server 2012 R2 安装密钥(只适用安装,不支持激活)

    标准版 = NB4WH-BBBYV-3MPPC-9RCMV-46XCB 数据中心版 = BH9T4-4N7CW-67J3M-64J36-WW98Y

  10. 吴恩达机器学习笔记60-大规模机器学习(Large Scale Machine Learning)

    一.随机梯度下降算法 之前了解的梯度下降是指批量梯度下降:如果我们一定需要一个大规模的训练集,我们可以尝试使用随机梯度下降法(SGD)来代替批量梯度下降法. 在随机梯度下降法中,我们定义代价函数为一个 ...