3

我正在尝试在 ListView 的 OnItemClick 事件中设置选定的项目,它只是不会让项目保持选中状态。我究竟做错了什么?

lView.setOnItemClickListener(new OnItemClickListener()
   {
    @Override
    public void onItemClick(@SuppressWarnings("rawtypes") AdapterView parent, View clickedview, int position, long id)
    {
     clickedview.setSelected(true); 
        mItemsAdapter.select(position);
    }
   }); 

几件事:
1.我正在尝试在列表视图上实现多选。
2. 我不能从 ListActivity 扩展,因为 Activity 已经从 BaseActivity 自定义类扩展。
3. mItemsAdapter 是扩展BaseAdapter 的自定义ItemsAdapter 适配器。
4. 我不需要那里的复选框,只是为了能够看到选中的行就可以了。
5.ItemsAdapter覆盖getView(),通过inflating xml设置行的布局

4

3 回答 3

5

长按时,我可以设法将 ListView 的一个项目设置为选中:

@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
        int position, long id) {
    parent.requestFocusFromTouch(); // IMPORTANT!
    parent.setSelection(position);
    return true;
}

它只有在我打电话后才起作用requestFocusFromTouch()

于 2012-07-18T16:07:02.410 回答
0

使用内置功能进行选择时,我运气不佳。

我看到您有自己的自定义适配器,我猜这意味着您将自定义视图膨胀为行。如果您的行有任何内容,那么我认为您将无法正确使用 setSelections。

我通过使用自己的模型和函数解决了这个问题。列表中的每个项目都有数据来确定它是否被选中。然后我可以遍历该数组,切换选择,甚至通过更改值和调用适配器上的 notifydatasetchanged 来更新 UI(它使用 getView 并对照我的选择模型进行检查以进行检查)。

于 2011-01-26T05:39:08.910 回答
0

我目前没有太多时间。所以今天晚些时候我会再看看。不管怎样,看看我以前的问题,我也遇到了同样的问题:

如果您的解决方案不在那里(我认为它在第一个),我们将需要更多代码来帮助您。

希望这个对你有帮助。

于 2011-01-26T07:45:49.310 回答