【问题标题】:ListView with MultiChoice selection in Android in order they were selected在Android中使用MultiChoice选择的ListView按它们被选中的顺序
【发布时间】:2016-10-26 06:43:39
【问题描述】:

我正在尝试以下代码

public class MainActivity extends Activity {
 private ListView list;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  final String[] items = { "item 1", "item 2", "item 3", "item 4",
    "item 5", "item 6", "item 7" };
  ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_multiple_choice, items);

  list = (ListView) findViewById(R.id.list);
  list.setAdapter(adapter);
  list.setOnItemClickListener(new OnItemClickListener() {

   @Override
   public void onItemClick(AdapterView<?> parent, View view,
     int position, long id) {
    String checkedItems = displayCheckedItems(list
      .getCheckedItemPositions());
    Toast.makeText(getApplicationContext(), checkedItems,
      Toast.LENGTH_SHORT).show();

   }

  });
 }

 /**
  * The method checks the SparseBooleanArray in order to return String
  * representation with the names of the checked items
  * 
  * @param checkedItems
  * @return String
  */
 private String displayCheckedItems(SparseBooleanArray checkedItems) {
  StringBuffer sb = new StringBuffer("");
  for (int i = 0; i < checkedItems.size(); i++) {

   if (checkedItems.valueAt(i)) {
    int idx = checkedItems.keyAt(i);

    if (sb.length() > 0)
     sb.append(", ");

    String s = (String) list.getAdapter().getItem(idx);
    sb.append(s);

   }
  }

  return sb.toString();
 }
}

这会按照它们在原始 String[] items 中出现的顺序为我提供所选项目

但是我想按照我选择的顺序获取项目

例如

“第 7 项”、“第 3 项”、“第 1 项”、

我选择它的顺序和不喜欢

“项目 1”、“项目 3”、“项目 7”、

如何做到这一点

【问题讨论】:

  • 当你选择一个复选框时,将该位置添加到一个数组中,当你取消选中它时,从数组中删除该位置。最后,如果项目按您选择的顺序排列,最后您将获得包含位置的数组
  • 我用getCheckedItemPosition NOT getCheckedItemPositions 尝试了这个逻辑,但我没有得到可以添加到数组中的所选项目位置
  • 对复选框实现自定义点击监听,可以获取位置

标签: android listview multi-select


【解决方案1】:

首先你需要检查每个元素是否存在于字符串中,如果不存在你可以为tmp字符串添加新值; 结果是:

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                String tmp = Sort(parent.getItemAtPosition(position).toString());
                Toast.makeText(getContext(),String.valueOf(tmp),Toast.LENGTH_SHORT).show();
            }
        });
private String Sort(String tmp){

        if (order.contains(tmp)){
            Log.d("contain","contain");
            order = order.replace(","+tmp,"");
        }else if (order.length() == 0){
            order +=  tmp;
        }else {
            order +=  ","+tmp;
        }
        return order;
    }

【讨论】:

    猜你喜欢
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多