【问题标题】:How to implement multiple item selection on spinner with check boxes如何使用复选框在微调器上实现多项选择
【发布时间】:2019-06-22 13:30:21
【问题描述】:
    DocumentReference docRef7 = FirebaseFirestore.getInstance().collection("admin").document("users_profile").collection("dynamic_profile").document("city");
    docRef7.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DocumentSnapshot> task) {
            if (task.isSuccessful()) {
                DocumentSnapshot document = task.getResult();
                if (document != null) {

                    //-----------code for loading array item from firebase to spinner view-----------------
                    final List<String> group = (List<String>) document.get("options");
                    Log.d(TAG, "DocumentSnapshot data: " + task.getResult().getData());


                    cityFAdapter = new ArrayAdapter<String>(AdminSetting.this, android.R.layout.simple_spinner_item, group);
                    cityFAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    cityFSpinner.setAdapter(cityFAdapter);

                    cityFSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                        @Override
                        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                            AlertDialog.Builder mBuilder = new AlertDialog.Builder(AdminSetting.this);
                            AlertDialog.Builder builder=  mBuilder.setTitle("Select your favourite 3 cities ");
                            mBuilder.setMultiChoiceItems(new String[]{String.valueOf(group)}, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int position, boolean isChecked) {
                                    if (isChecked){
                                        if (!mUserItems.contains(position)){
                                            mUserItems.add(position);
                                        }else {
                                            mUserItems.remove(position);
                                        }
                                    }
                                    if(isChecked){
                                        mUserItems.add(position);
                                    }else{
                                        mUserItems.remove((Integer.valueOf(position)));
                                    }

                                }
                            });
                            mBuilder.setCancelable(false);
                            mBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {

                                    String scity = "";
                                    for (int i=0 ;i<mUserItems.size();i++){
                                        scity = scity + group.get(mUserItems.get(i));
                                        if (i != mUserItems.size() -1){
                                            scity = scity+ ",";
                                        }
                                    }
                                    displayCity.setText(scity);

                                }
                            });
                            mBuilder.setNegativeButton("Dismiss", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    dialog.dismiss();
                                }
                            });

                            mBuilder.setNeutralButton("Clear all", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    for(int i=0; i<checkedItems.length;i++){
                                        checkedItems[i]=false;
                                        mUserItems.clear();
                                        displayCity.setText("");
                                    }
                                }
                            });

                            AlertDialog mDialog = mBuilder.create();
                            mDialog.show();

                        }

                        @Override
                        public void onNothingSelected(AdapterView<?> parent) {

                        }
                    });


                } else {
                    Log.d(TAG, "No such document");
                }
            } else {
                Log.d(TAG, "get failed with ", task.getException());
            }
        }
    });

我想以列表方式显示带有复选框的警报对话框,而不是像图像中那样显示所有值。 因为我想从该列表中选择三个首选城市并将其显示在 textview 上。 以正确的方式设置适配器后,我在微调器上获得了列表,但我希望在带有复选框的警报对话框上得到相同的列表

// 变量声明

  • boolean[] 已检查项;
  • ArrayList mUserItems = new ArrayList();

Refer this image

【问题讨论】:

    标签: android google-cloud-firestore android-spinner


    【解决方案1】:

    需要在 build.gradle 文件中添加材质对话框的依赖。

    dependencies {
        implementation 'com.afollestad.material-dialogs:commons:0.9.6.0'
    }
    

    // 实现下面的代码。

    new MaterialDialog.Builder(this)
            .title(R.string.title)
            .items(R.array.items)
            .itemsCallbackMultiChoice(null, new MaterialDialog.ListCallbackMultiChoice() {
                @Override
                public boolean onSelection(MaterialDialog dialog, Integer[] which, CharSequence[] text) {
                    /**
                     * If you use alwaysCallMultiChoiceCallback(), which is discussed below,
                     * returning false here won't allow the newly selected check box to actually be selected
                     * (or the newly unselected check box to be unchecked).
                     * See the limited multi choice dialog example in the sample project for details.
                     **/
                     return true;
                }
            })
            .positiveText(R.string.choose)
            .show();
    

    【讨论】:

    • 它工作完美,但如何检索选定的数据并将其设置在 textview 上。
    • 在 onSelection() 中,你可以得到被检查的 id 和 text。从这里您可以获取选定的数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    相关资源
    最近更新 更多