在fragment和activity中 如何对dialog中的spinner取值

26 篇文章 1 订阅
11 篇文章 0 订阅

正常情况下我们可以直接在dialog里写上我们想要的view,但是有时候view太多的话,我们就需要自定义一个dialog,其实就是将dialog的内容替换为我们写好的layout文件。

因为我用Jetpack开发,所以操作都是在Fragment中完成。

比如我创建了一个layout文件:

<!-- 这个文件名是allclasstime.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    
            <Spinner
            android:id="@+id/week"
            android:layout_width="135dp"
            android:layout_height="wrap_content"
            android:layout_weight="3"
            android:entries="@array/week" />
            
	<!-- 其他布局就不写了 -->
    </LinearLayout>
</LinearLayout>

效果如下:
在这里插入图片描述
为了最简单化,我只演示星期的选择就好啦。图中星期选择这个spinner的id是week
同时这个spinner的数据来自weekdata这个数组:(记住数组名,待会会经常用到)

    <string-array name="weekdata">
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
        <item></item>
    </string-array>

现在要做的就是初始化dialog框,正常操作就是点击按钮出现dialog:

       button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showInputDialog();  //出现dialog
            }
        });

然后showInputDialog()的定义如下:

void showInputDialog() {
		//读取刚刚定义的allclasstime.xml文件做为view
        final View view = LayoutInflater.from(getActivity()).inflate(R.layout.allclasstime, null);
        
        //将view绑定给AlertDialog.Builder对象,并且取个标题,我这里叫“详细课程时间”
        AlertDialog.Builder inputDialog = new AlertDialog.Builder(getActivity()).setTitle("详细课时间").setView(view);

		//从view里获取我们的spinner
        final Spinner weekS = view.findViewById(R.id.week);

		//为Spinner:weekS添加适配器,creatAdapter()方法我将写在下面,
		//这个方法需要传入你的spinner数据源,也就是R.array.weekdata
        weekS.setAdapter(creatAdapter(R.array.weekdata));
        
        //为Spinner:weekS添加元素选择监听事件
        weekS.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            
                //获取选择的元素,注意还要传入R.array.weekdata文件
                String week = getActivity().getResources().getStringArray(R.array.weekdata)[position];     //获取选择的item内容

				//输出看看
                Log.d("mylog", "week:" + week);
                Toast.makeText(getActivity(),"获取:"+ week,Toast.LENGTH_SHORT).show();
            }
            
            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

creatAdapter()方法定义如下,复制即可

	//参数int yourSpinnerDataXML就是你的spinner数据源如:R.array.weekdata
	//如果你是在activity中使用这个方法,请把第二行的getActivity()改为context
    public ArrayAdapter<CharSequence> creatAdapter(int yourSpinnerDataXML){
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(),
                yourSpinnerDataXML,android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        return adapter;
    }

看一下运行结果:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值