ListView OnLongClick奇怪的行为

时间:2013-02-11 20:32:04

标签: java android mobile onlongclicklistener

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

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

问题在于,当我长按项目时,布局会发生变化(如预期的那样),但其他ListItem也会受到影响,并以相同的方式进行更改。这似乎每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;
   }});

我很感激任何帮助,非常感谢提前。

1 个答案:

答案 0 :(得分:0)

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