ListView项目选择

时间:2011-10-04 13:45:28

标签: android listview android-listview focusable statelist

我有一个包含自定义列表项的ListView。每个列表项由2个线性布局组成,彼此相邻。         LinearLayout 1 | LinearLayout 2 |

我已经为两个LinearLayouts声明了状态列表drawable,其中state_pressed我正在改变LinearLayout的背景。

问题就出现了 - 当用户点击LinearLayout2时,只应更改LinearLayout2的背景,LinearLayout1的背景应保持不变。另一方面,当用户点击LinearLayout1时,只应更改LinearLayout1的背景。但是现在当用户点击两个LinearLayouts时,它们都会改变它们的背景。

在LinearLayout2上点击的行为应该是onListItemClick(),而当用户点击LinearLayout1时,应该出现一个对话框(如果这很重要)。

任何想法如何解决背景变化问题?我尝试过使用可聚焦和可点击的选项。如果我将clickable = true设置为两个LinearLayouts,则LinearLayout2的子项(TextViews)不会更改其颜色(TextViews应更改其文本颜色)。

谢谢!

2 个答案:

答案 0 :(得分:0)

这是因为在使用列表视图时,您必须更改XML中的某些标记以使背景透明,以便它能够正确地处理您的背景。

将其添加到ListView XML代码中。

android:cacheColorHint="#00000000"

将ListView的背景设置为透明。

答案 1 :(得分:0)

如果您使用BaseAdapter作为扩展

,我认为是单一解决方案

首先为xml文件中的这些布局提供唯一ID并添加

android:clickable="true"

在你的方法中

 public View getView(int position, View convertView, ViewGroup parent) {

当你获得像

这样的观点时
 holder.layout1_name=(LinearLayout)view.findViewById(R.id.layout1);
 holder.layout1_name.setOnClickListener( clicklayout1);
 holder.layout2_name=(LinearLayout)view.findViewById(R.id.layout2);
holder.layout2_name.setOnClickListener( clicklayout2);

在其上添加点击侦听器

private OnClickListener clicklayout1 = new OnClickListener() {
    public void onClick(View v) {

         //Do what you want to do here
    }
};


private OnClickListener clicklayout2 = new OnClickListener() {
    public void onClick(View v) {

         //Do what you want to do here
    }
};

可能这可能对你有帮助