【发布时间】:2014-02-14 17:14:07
【问题描述】:
我对此感到困惑。我正在搜索超过 2 小时,但无法理解发生了什么。
我有一个列表视图,我希望项目(行)可以选择。 为此,我将一个选择器设置为行布局的背景。
ListView 在 fragment.xml 布局文件中是这样定义的:
<ListView
android:id="@+id/lst_friends"
android:layout_width="match_parent"
android:dividerHeight="1dp"
android:divider="#ff0000"
android:layout_height="0dp"
android:layout_weight="1.0" />
选择器 (bg_row_contact.xml) 是这样的:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" android:state_selected="false"/>
<item android:drawable="@color/pink" android:state_selected="true"/>
</selector>
我的行布局(row_contact.xml)是这样的:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_row_contact"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_margin="7dp"
android:gravity="center" >
<ImageView
android:id="@+id/img_lst"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/contentDescription_pic" />
</LinearLayout>
<TextView
android:id="@+id/txt_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginRight="20dp"
android:layout_marginLeft="10dp"
android:ellipsize="end"
android:maxLines="2"
android:textColor="#000000"
android:textSize="16sp" />
</LinearLayout>
现在,我有一个自定义适配器,我这样做是为了在用户单击该行时将一个项目标记为选中,效果很好:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// View from recycle
View row = convertView;
// Handle inflation and make sure not to re-use a header view
if (row == null) {
LayoutInflater inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.row_contact, null);
row.setTag(position);
row.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
v.setSelected(!v.isSelected());
}
});
}
boolean condition = (position==3);
row.setSelected(condition);
}
我现在的问题是,当列表视图滚动时,我显然想保持选择状态。所以我有一个条件,我检查并基于此将行设置为选中或不选中,如您在
中所见row.setSelected(boolean condition);
问题在于,虽然某些行的条件为真,但该行的背景选择器不起作用,并且该行没有高亮显示。
我已经尝试了所有方法,但找不到这里发生的哔哔声。
有什么建议吗?
【问题讨论】:
-
row.setSelected(boolean condition);您是否将参数与数据类型一起传递?应该是这样的boolean condition; ..... row.setSelected(condition); -
这只是为了解释我的工作。条件是基于条件定义的布尔值。是
true或false -
你如何使这个“条件”变量?
-
似乎太多人错误地关注布尔条件。我可以将其硬编码为 true,这通常应该选择所有行并将它们全部突出显示,但它不会选择任何行。为了避免混淆,我稍微更改了代码,虽然这是一个示例
-
我记得我曾经遇到过类似的问题,但我唯一记得的是我必须交换侦听器的顺序并设置选择。虽然它带有一个checkedStateChangeListener。我真的不知道它是否会有所帮助,但你可以尝试一下。
标签: android listview android-listview