Android的:在一个多选的ListView里面AlertDialog选择项目 [英] Android: Select items in a multi-select ListView inside AlertDialog

查看:280
本文介绍了Android的:在一个多选的ListView里面AlertDialog选择项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新android开发和如何通过alertdialog主办的列表视图中选择某些项目中挣扎。在下面的code,如列表视图尚未产生lv.setItemChecked不工作,所以我想知道如果有任何的ListView或AlertDialog事件,印证了这一观点已经生成。

 的String []值= {A,B,C};ArrayAdapter<串GT; ADP =新ArrayAdapter<串GT;(这一点,android.R.layout.simple_list_item_multiple_choice,价值观);ListView控件LV =新的ListView(这一点);
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
lv.setOnItemClickListener(本);
lv.setAdapter(ADP);AlertDialog.Builder BLDR =新AlertDialog.Builder(本);
bldr.setTitle(选择);
bldr.setView(LV);
bldr.setPositiveButton(完成,
    新DialogInterface.OnClickListener(){
        @覆盖
        公共无效的onClick(DialogInterface对话,诠释它){
            handleDone();
        }
    });
bldr.setNegativeButton(取消,
    新DialogInterface.OnClickListener(){
        @覆盖
        公共无效的onClick(DialogInterface对话,诠释它){
            handleCancel();
        }
    });最后一个对话框DLG = bldr.create();
dlg.show();

没关系,我知道了。我打电话lv.setItemChecked(0,TRUE)lv.setAdapter之后()调用。有一次,我dlg.show()后移动了它,它的工作就像一个魅力。


解决方案

 公共类DialogoSeleccion扩展DialogFragment {
@覆盖
公共对话框onCreateDialog(捆绑savedInstanceState){ 最终的String []项目= {西班牙语,英语,弗朗西斯};    AlertDialog.Builder建设者=
            新AlertDialog.Builder(getActivity());    builder.setTitle(Selecci贸)
       .setItems(项目,新DialogInterface.OnClickListener(){
            公共无效的onClick(DialogInterface对话,诠释项){
                Log.i(Dialogos,Opciónelegida:+项目[项目]);
            }
        });    返回builder.create();
}
}

,你会得到这样的:

如果你想记住或显示最后选定的项目,只是改变了一套setSingleChoiceItems()或setMultiChiceItems的setItems()方法。使用setSingleChoiceItems()很容易,只要通过其它参数(索引集选择,如果u不想设置,传递-1):

  builder.setTitle(Selecci贸)
  .setSingleChoiceItems(物品,-1,
           新DialogInterface.OnClickListener(){
        公共无效的onClick(DialogInterface对话,诠释项){
            Log.i(Dialogos,Opciónelegida:+项目[项目]);
        }    });

通过上段,你会有这样的事情

如果你想有一个multichoose,你应该改变方法,第二个参数现在还没有将是一个整数,应该是一个布尔数组,通过这种方式,您将设置ID的任何选项启用或不:

  builder.setTitle(Selecci贸)
.setMultiChoiceItems(项目,空,
    新DialogInterface.OnMultiChoiceClickListener(){
    公共无效的onClick(DialogInterface对话框,INT项目,布尔器isChecked){
         Log.i(Dialogos,Opciónelegida:+项目[项目]);
   }
});

结果将是这样的:

要调用任何THRE例子的方法是这样的:

  FragmentManager fragmentManager = getSupportFragmentManager();
    DialogoSeleccion dialogo =新DialogoSeleccion();
    dialogo.show(fragmentManagertagSeleccion);

如果你知道这个西班牙语指南将帮助您:为AlertDialogs 完全指南或刚刚获得完整的示例在这里,在 GitHub的

I am new to android development and struggling with how to select certain items in a listview hosted by an alertdialog. In the below code, lv.setItemChecked doesn't work as listview hasn't been generated yet, so I am wondering if there's any ListView or AlertDialog event which confirms that view has been generated.

String [] values = {"a","b","c"};

ArrayAdapter<String> adp = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice, values);

ListView lv = new ListView(this);
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
lv.setOnItemClickListener(this);
lv.setAdapter(adp);

AlertDialog.Builder bldr = new AlertDialog.Builder(this);
bldr.setTitle("Select");
bldr.setView(lv);
bldr.setPositiveButton("Done",
    new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handleDone();
        }
    });
bldr.setNegativeButton("Cancel",
    new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handleCancel();
        }
    });

final Dialog dlg = bldr.create();
dlg.show();

Never mind, I got it. I was calling lv.setItemChecked(0, true) right after lv.setAdapter() call. Once I moved it after dlg.show(), it worked like a charm.

解决方案

public class DialogoSeleccion extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

 final String[] items = {"Español", "Inglés", "Francés"};

    AlertDialog.Builder builder =
            new AlertDialog.Builder(getActivity());

    builder.setTitle("Selección")
       .setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                Log.i("Dialogos", "Opción elegida: " + items[item]);
            }
        });

    return builder.create();
}
}

And you will get something like this:

If you want to remember or show the last selected item, just change the setItems method for set setSingleChoiceItems() or setMultiChiceItems(). Using setSingleChoiceItems() is easy, just pass other parameter (index for set selection, if u dont want to set, pass -1):

builder.setTitle("Selección")
  .setSingleChoiceItems(items, -1,
           new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {
            Log.i("Dialogos", "Opción elegida: " + items[item]);
        }

    });

With upper snippet you will have something like this

If you want a multichoose, you should change the method, and the second parameter now not will be a integer, should be a boolean array, by this way you will set id any option is enabled or not:

builder.setTitle("Selección")
.setMultiChoiceItems(items, null,
    new DialogInterface.OnMultiChoiceClickListener() {
    public void onClick(DialogInterface dialog, int item, boolean isChecked) {
         Log.i("Dialogos", "Opción elegida: " + items[item]);
   }
});

The result will be this:

The way to call any of the thre examples is this:

FragmentManager fragmentManager = getSupportFragmentManager();
    DialogoSeleccion dialogo = new DialogoSeleccion();
    dialogo.show(fragmentManager, "tagSeleccion");

If you know spanish this guide will help you: Complete guide for AlertDialogs or just get the complete example here, in GitHub

这篇关于Android的:在一个多选的ListView里面AlertDialog选择项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆