【发布时间】: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”、
如何做到这一点
【问题讨论】:
-
当你选择一个复选框时,将该位置添加到一个数组中,当你取消选中它时,从数组中删除该位置。最后,如果项目按您选择的顺序排列,最后您将获得包含位置的数组
-
我用
getCheckedItemPositionNOTgetCheckedItemPositions尝试了这个逻辑,但我没有得到可以添加到数组中的所选项目位置 -
对复选框实现自定义点击监听,可以获取位置
标签: android listview multi-select