【问题标题】:Multiple selection listview android with custom adapter带有自定义适配器的多选listview android
【发布时间】:2014-12-09 10:02:07
【问题描述】:

我在网上学习了很多教程,但最后我无法得到我想要的东西。所以在我所有的研究之后终于在这里找到了更好的建议和答案。

我有一个带有复选框的列表视图,我需要获取列表视图的所有选中项。

这是我的布局:

   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/lineItem"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:orientation="horizontal" >
    <CheckBox android:id="@+id/chklist"
       android:layout_alignParentLeft="true"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"/>
    <TextView
       android:id="@+id/textView"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_weight="2"
       android:ems="10"
       android:padding="10dp"
       android:textColor="#800080"
       android:textSize="16sp"/>
    </LinearLayout>

我正在使用自定义适配器,并且我得到了如图所示的选中项:

holder.chk.setOnClickListener(new OnClickListener() {
               @Override
               public void onClick(View v) {
                // TODO Auto-generated method stub
                   String listItemText = holder.txtName.getText()
                            .toString();
                if (holder.chk.isChecked())
                    Toast.makeText(getApplicationContext(),
                            "Checked" + " " + listItemText,
                            Toast.LENGTH_SHORT).show();
                else
                    Toast.makeText(getApplicationContext(),
                            "Unchecked" + " " + listItemText,
                            Toast.LENGTH_SHORT).show();
               }
              });

以及如何从我的 ListView OnItemClick 侦听器中获取所有选中的项目:

 lv.setOnItemClickListener(new OnItemClickListener() {
                                @Override
                                public void onItemClick(AdapterView<?> parent,
                                        View view, int position, long id) {

   //Here  I need to get all the checked items

    }
    });

自定义适配器:

public class MyListAdapter extends BaseAdapter {

    public LayoutInflater inflater;
    public Activity context;
    ArrayList<String> arr_calllog_name = new ArrayList<String>();
    boolean[] itemChecked;

    public MyListAdapter(Activity context,
            ArrayList<String> arr_calllog_name) {

        super();
        this.context = context;
        this.arr_calllog_name = arr_calllog_name;
        this.inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        itemChecked = new boolean[arr_calllog_name.size()];
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return arr_calllog_name.size();
    }

    @Override
    public Object getItem(int position) {
        return arr_calllog_name.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    public class ViewHolder {
        CheckBox chk;
        ImageView editimage, delimage;
        TextView txtName;
        LinearLayout row;
    }

    @Override
    public View getView(final int position, View convertView,
            ViewGroup parent) {
        // TODO Auto-generated method stub

        final ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = inflater.inflate(R.layout.list, null);
            holder.chk = (CheckBox) convertView
                    .findViewById(R.id.chklist);
            holder.txtName = (TextView) convertView
                    .findViewById(R.id.textView);
            holder.row = (LinearLayout) convertView
                    .findViewById(R.id.lineItem);
            convertView.setTag(holder);

        } else
            holder = (ViewHolder) convertView.getTag();

        holder.txtName.setText(arr_calllog_name.get(position));

        holder.row.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                /*
                 * Intent i = new Intent(AddItems.this, AddItems.class);
                 * Bundle bundle = new Bundle(); // Add your data from
                 * getFactualResults method // to bundle String listItemText
                 * = holder.txtName.getText().toString();
                 * 
                 * bundle.putString("Listname", listItemText);
                 * i.putStringArrayListExtra("AddedList", MyList); // Add
                 * the bundle to the intent i.putExtras(bundle);
                 * startActivity(i);
                 */

            }
        });

        holder.chk.setOnClickListener(new OnClickListener() {
               @Override
               public void onClick(View v) {
                // TODO Auto-generated method stub
                   String listItemText = holder.txtName.getText()
                            .toString();
                if (holder.chk.isChecked())
                    Toast.makeText(getApplicationContext(),
                            "Checked" + " " + listItemText,
                            Toast.LENGTH_SHORT).show();
                else
                    Toast.makeText(getApplicationContext(),
                            "Unchecked" + " " + listItemText,
                            Toast.LENGTH_SHORT).show();
               }
              });
        return convertView;

    }

}

【问题讨论】:

标签: android android-listview checkedlistbox items


【解决方案1】:

您的适配器包含您列表中的所有项目。在您的情况下,此类项目的一个实例应至少包含一个字符串(用于 textView)和一个布尔值(用于 CheckBox)。每当您想要所有复选框的列表时,只需遍历您的列表项并创建一个包含所有具有真正布尔值的项的临时列表。

List<YourListItemObject> checkedItems = new ArrayList<YourListItemObject>();

for (YourListItemObject listItem : adapter.getItems()) {
  if (listItem.getBool()) {
     checkedItems.Add(listItem);
  }
}

【讨论】:

  • 我也做了同样的事情......你能告诉我如何迭代它吗?如果你愿意,我会发布我的适配器的相关部分
  • 查看我的编辑,我添加了一些代码示例。也许您必须将项目强制转换为“YourListItemObject”...有一段时间没有做过 Java ;)
【解决方案2】:

尝试使用此选项进行多项选择。

        <ListView
        android:id="@+id/myListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:choiceMode="multipleChoice"
        />

查看此链接http://adanware.blogspot.in/2012/04/android-multiple-selection-listview.html

【讨论】:

  • 是的..我同意,但我如何得到结果? (即..假设如果我检查了第 1 项、第 2 项和第 3 项...我需要得到结果,因为您选择了这 3 项)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 1970-01-01
  • 2015-08-22
  • 2014-09-06
  • 2013-05-21
  • 1970-01-01
相关资源
最近更新 更多