【问题标题】:ListView item selectionListView 项目选择
【发布时间】:2011-10-04 13:45:27
【问题描述】:

我有一个带有自定义列表项的 ListView。每个列表项由 2 个并排的线性布局组成。 线性布局 1 |线性布局 2 |

我已经为两个 LinearLayouts 声明了状态列表可绘制对象,在 state_pressed 中我正在更改 LinearLayout 的背景。

问题来了 - 当用户点击 LinearLayout2 时,只有 LinearLayout2 的背景应该改变,LinearLayout1 的背景应该保持不变。另一方面,当用户点击 LinearLayout1 时,仅应更改 LinearLayout1 的背景。但是现在当用户点击两个 LinearLayout 中的任何一个时,它们都会改变背景。

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

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

谢谢!

【问题讨论】:

  • 请详细说明,您的列表视图行是否包含两个布局或其他内容
  • LinearLayout1 仅包含一个 ImageView。 LinearLayout2 包含几个 TextViews 和 ImageViews。 LinearLayout1 和 2 都放在一个具有orientation=horizo​​ntal 的父LinearLayout 中。

标签: android listview android-listview focusable statelist


【解决方案1】:

这是因为在使用列表视图时,您必须更改 XML 中的一些标签以使背景透明,以便它可以正确地与您的背景配合使用。

将此添加到您的 ListView XML 代码中。

android:cacheColorHint="#00000000"

将 ListView 的背景设置为透明。

【讨论】:

  • 它不起作用。此外,LinearLayouts 的背景确实发生了变化,但它们都发生了变化,而不仅仅是其中一个。
  • onItemSelected 的代码是什么样的?或者你用什么来改变颜色的?看起来你改变了两个线性布局的颜色。
  • 我有 2 个状态列表可绘制对象 - 一个用于第一个 LinearLayout,一个用于第二个 LinearLayout。两个状态列表drawables都有android:state_pressed,新的背景设置为drawable。
  • 好吧,如果你不想改变 linearlayout1 或 2 的背景..你为什么要设置它的按下状态?当然会变色。
【解决方案2】:

如果你使用 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
    }
};

也许这对你有帮助

【讨论】:

  • 是的,通过java代码做背景改变应该不是一件难事,我只是想通过XML/状态列表drawables和类似的东西来做,它更优雅。
  • 好吧,如果你想要动态,你必须在 java 中做,但如果你想要静态,你可以在 xml 中做。但是我的朋友在使用 java 时要小心,因为如果你不释放资源,你可能会陷入严重的内存问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多