Android 正在设置从适配器选中的ListView项
我有一个列表视图,它显示两种项目。其中一种包含CheckedTextView。作为一个适配器,我正在使用自定义适配器扩展ArrayAdapter,其数据结构包含关于内部选中/未选中状态的信息 有些项目被标记为选中(在我的数据结构中),因此我当然希望在创建ListView时标记复选框。我尝试使用CheckedTextView的setChecked()方法在适配器中的getView()方法上执行此操作,但不起作用。我发现应该使用setItemChecked()在ListView级别执行此操作,它确实可以工作,但对我来说没有意义,因为要使其工作,我必须循环activity的onCreate()中的所有项,为选定的项调用setItemChecked()。项目列表可能很长,只选择了少数项目,因此这是一种浪费 为什么在getView()中调用setChecked()不起作用?有没有更好的方法(我是Android新手) 下面是我选中的项目布局和适配器 布局:Android 正在设置从适配器选中的ListView项,android,listview,checkedtextview,Android,Listview,Checkedtextview,我有一个列表视图,它显示两种项目。其中一种包含CheckedTextView。作为一个适配器,我正在使用自定义适配器扩展ArrayAdapter,其数据结构包含关于内部选中/未选中状态的信息 有些项目被标记为选中(在我的数据结构中),因此我当然希望在创建ListView时标记复选框。我尝试使用CheckedTextView的setChecked()方法在适配器中的getView()方法上执行此操作,但不起作用。我发现应该使用setItemChecked()在ListView级别执行此操作,它确实
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical"
android:textAppearance="@style/listViewItemText"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:paddingLeft="6dp"
android:paddingRight="6dp"
/>
编辑:
在找到更好的解决方案之前,我在活动中执行了检查:
...
int len = mListView.getCount();
for (int i = 0; i < len; i++) {
if (((MultiChoiceItem) mListView.getItemAtPosition(i)).selected) {
mListView.setItemChecked(i, true);
}
}
...
。。。
int len=mListView.getCount();
对于(int i=0;i
我原以为性能是唯一的潜在问题,但我发现了另一个问题——更严重。列表已启用文本筛选器(mListView.setTextFilterEnabled(true))。以下是失败场景:
`android:onClick="chatWithFriend"`
所以当点击复选框时
然后在活动名称中创建一个方法
public void chatWithFriend(View view){}
here you will get the view of check box,
现在在返回convert视图之前在getView中添加行
holder.checkbox.setTag(位置)
现在,您将获得复选框的位置
我希望这将对您有所帮助。如果您使用
ListView.CHOICE\u MODE\u MULTIPLE
或CHOICE\u MODE\u SINGLE
调用getView
后,项目的检查状态将被ListView覆盖。您必须使用以下构造:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
((ListView)parent).setItemChecked(position, true);
}
另一种可能是使用
列表视图。选择\u MODE\u NONE
并自己管理检查状态。可能我没有说清楚。我在获取物品位置方面没有任何问题。所有“点击”动作都可以正常工作。不起作用的是在新创建的列表视图上检查所选项目(此信息在传递给适配器的数据中)。这可能会有所帮助。很抱歉,我看不出这对我有什么帮助:(我也面临同样的问题。滚动列表视图时,我的选中项会消失。我在适配器中尝试了你的代码块,但滚动列表视图时,我的选中项仍会消失。谢谢,我花了很长时间才找到解决方案。
public void chatWithFriend(View view){}
here you will get the view of check box,
@Override
public View getView(int position, View convertView, ViewGroup parent) {
((ListView)parent).setItemChecked(position, true);
}