在ListView中选择多个项目

时间:2009-09-01 13:49:26

标签: android

如何在Android中的ListView中选择多个项目。

10 个答案:

答案 0 :(得分:43)

实际上你可以;)这只是用户体验的问题,对吧?

试试这个,(1)列表控制集

listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);   
listView.setItemsCanFocus(false);

(2)将列表项定义为

<CheckedTextView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:gravity="center_vertical"
    android:paddingLeft="6dip"
    android:paddingRight="6dip"
    android:checkMark="?android:attr/listChoiceIndicatorMultiple"
    android:background="@drawable/txt_view_bg" />

这与android.R.layout.simple_list_item_multiple_choice相同,除了 android:background="@drawable/txt_view_bg

(3)将drawable txt_view_bg.xml定义为

<item android:drawable="@drawable/selected"
  android:state_checked="true" />  
<item android:drawable="@drawable/not_selected" />

注意: - 处理多项选择的首选方法是在点击项目点击时跟踪您自己的选择,而不是依赖于列表中的状态。

答案 1 :(得分:13)

第1步: setAdapter到您的列表视图。

 listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, GENRES)); 

第2步:为列表视图设置选择模式。下面第二行代码表示应选中哪个复选框。

listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setItemChecked(2, true);

listView.setOnItemClickListener(this);



 private static  String[] GENRES = new String[] {
        "Action", "Adventure", "Animation", "Children", "Comedy", "Documentary", "Drama",
        "Foreign", "History", "Independent", "Romance", "Sci-Fi", "Television", "Thriller"
    };

第3步:在SparseBooleanArray中返回已检查的视图,因此您可以使用以下代码获取键或值。下面的示例只是在一个字符串中显示选定的名称。

@Override
    public void onItemClick(AdapterView<?> adapter, View arg1, int arg2, long arg3)
    {

    SparseBooleanArray sp=getListView().getCheckedItemPositions();

    String str="";
    for(int i=0;i<sp.size();i++)
    {
        str+=GENRES[sp.keyAt(i)]+",";
    }
    Toast.makeText(this, ""+str, Toast.LENGTH_SHORT).show();

    }

答案 2 :(得分:5)

此示例存储您已检查的值并以吐司形式显示它们。取消选中项目http://android-coding.blogspot.ro/2011/09/listview-with-multiple-choice.html

时会更新

答案 3 :(得分:2)

取消选中某些项目后,要“更新”Toast消息,只需将此行放在for循环中:

if (sp.valueAt(i))

结果如此:

for(int i=0;i<sp.size();i++)
{
    if (sp.valueAt(i))
        str+=names[sp.keyAt(i)]+",";
}

答案 4 :(得分:1)

这很简单,

listViewRequests.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    **AppCompatCheckedTextView checkBox = (AppCompatCheckedTextView) view;**
                    Log.i("CHECK",checkBox.isChecked()+""+checkBox.getText().toString());**

               }
            });

答案 5 :(得分:0)

并得到它:

public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

                Log.d(getLocalClassName(), "onItemClick(" + view + ","
                        + position + "," + id + ")");
        }
    });

答案 6 :(得分:0)

您必须在ArrayAdapter中选择选项:

ArrayAdapter<String> adapter = new ArrayAdapter<String>
    (this, android.R.layout.simple_list_item_single_choice, countries);

答案 7 :(得分:0)

最好的方法是在multiselect上有一个带有listview的上下文操作栏,你可以使用以下代码将listview设为multiselect

listview.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL);

现在为Listview设置multichoice侦听器,您可以在Android multi select listview

看到多选列表视图的完整实现

答案 8 :(得分:0)

I would advice to check the logic of ListActivity according to what is needed could be the best way not to lose much time

link

developer.android

答案 9 :(得分:0)

在listView中,您可以通过适配器使用它

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