【问题标题】:ListView OnLongClick strange behaviourListView OnLongClick 奇怪的行为
【发布时间】:2013-02-11 20:32:04
【问题描述】:

我的项目中有一个 ListView。它有很多元素,并且使用自定义适配器,因为它是从 Rails 服务器动态填充的。

我想在长按项目时更改 ListItem 的内容。为了实现这一点,我在 ListItem 中有 2 个布局,一个可见,一个隐藏。

问题是当我长按一个项目时,布局会发生变化(正如预期的那样),但其他 ListItems 也会受到影响,并且以相同的方式发生变化。这似乎每 5 个项目发生一次,我不知道为什么。

这是我正在使用的 LongClickListener,它位于自定义适配器的 getView 方法中:

View v = convertView;

if (v == null){
   LayoutInflater vi =
      (LayoutInflater)getActivity().getSystemService(
         Context.LAYOUT_INFLATER_SERVICE);
   v = vi.inflate(R.layout.list_item, null);
}

final LinearLayout placeInfo =
   (LinearLayout) v.findViewById(R.id.list_item_info);

final RelativeLayout placeBrief =
   (RelativeLayout)v.findViewById(R.id.list_item_brief);

v.setOnLongClickListener(new OnLongClickListener(){

   @Override public boolean onLongClick(View v) {
      placeInfo.setVisibility(View.GONE);
      placeBrief.setVisibility(View.VISIBLE);
      return false;
   }});

如果有任何帮助,我将不胜感激,非常感谢。

【问题讨论】:

  • 您是打算长按整个列表视图还是仅单击单个项目,如果是这样,您应该改用setOnItemLongClick()
  • 我试过了,但我无法让它工作。不过,我这样做的方式改变了布局。这是我无法解决的副作用(布局更改影响超过 1 个 ListItem)。
  • 所以我认为你想要做的是当你的列表视图中的一个项目被长时间点击时你不想再在列表中显示该项目?如果是这样的话,我可以很快写点东西。

标签: java android mobile onlongclicklistener


【解决方案1】:

ListViews 回收视图,因此您的所有项目只有几个视图。您正在直接更改这些视图实例之一以在 info|brief 之间切换。您需要保存受影响位置 其他地方 的 info|brief 标志的状态(例如,在适配器中应该是“简介”的位置列表)。这样当您返回getView() 时,您可以显示正确的。

【讨论】:

  • 我理解这个概念。但是,例如,我应该如何根据列表在 getView() 中显示正确的一个?我无法想象。
  • 最简单(但不是最有效的方法)是只拥有一个与列表大小相同的布尔数组,并带有一个true 值,该位置应显示为简短的位置。但是你不需要那么多,只需要一个包含你想要的索引的集合 (brief = set.contains(position))。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
相关资源
最近更新 更多