【问题标题】:Selecting Items from multiple choice ListView - android从多项选择 ListView 中选择项目 - android
【发布时间】:2012-01-19 10:15:37
【问题描述】:

我想选择用户在列表视图中检查的项目。我已将列表视图设置为 CHOICE_MODE_MULTIPLE,它向我显示了可以进行多项选择的列表。但是如何获得检查的项目?我尝试使用: SparseBooleanArray sp= lv.getCheckedItemPositions(); 存储选中的项目很好,但是当任何选中的项目未选中时,它不会更新数组;它显示了检查现在未选中项目的先前数据。 有办法吗?? 这是我的代码:

    final ListView lv = new ListView(getApplicationContext());
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
                     android.R.layout.simple_list_item_multiple_choice,arrayList);
    lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    lv.setAdapter(adapter);

      lv.setOnItemClickListener(new OnItemClickListener() {
          public void onItemClick(AdapterView<?> 
            myAdapter, View myView, int myItemInt, long mylng){

            SparseBooleanArray sp= lv.getCheckedItemPositions();

            String str="";
            for(int i=0;i<sp.size();i++)
            {
                str+=arrayList.get(sp.keyAt(i))+",";
            }
            Toast.makeText(getApplicationContext(), 
                    "You selected: "+str,
                    Toast.LENGTH_LONG).show();
          }                 
    });

我还想记住选中的项目,并在打开列表时将其显示为选中。

【问题讨论】:

  • IMO if (sp.valueAt(i)) processCheckedItem(sp.keyAt(i));
  • processCheckedItem() 属于哪个类?我不能称之为公正。需要通过对象来调用。
  • processCheckedItem 是示例自定义函数。你可以做任何事情。 afaik 在这种情况下,“keyAt”返回(未)选中的项目位置,“valueAt”返回是否选中了“keyAt”处的项目。

标签: android list listview onclick android-listview


【解决方案1】:

您必须在适配器中使用方法 notifyDataSetChanged()。这将更新 SparseBooleanArray。现在您检查和取消选中项目,支持数据结构不知道您在做什么。可以通过adapter通过adapter.notifyDataSetChanged()调用,也可以重写adapter类中的方法直接调用。

【讨论】:

  • 好的,我知道该怎么做了。现在我想让列表记住之前选择的内容,并在打开列表时将这些项目显示为选中状态。我已将先前检查的项目存储在一个文件中。打开列表时如何检查这些项目?
  • 有一个单例类 ListManager 来跟踪列表项,从文件中拉入选中的列表项和位置,更新 onClick 中的单例,然后再次写入文件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
相关资源
最近更新 更多