0

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

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

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

这是我正在使用的 LongClickListener,它位于自定义适配器的 de 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;
   }});

我将不胜感激任何帮助,非常感谢提前。

4

1 回答 1

0

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

于 2013-02-11T21:25:56.843 回答