我的项目中有一个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;
}});
我很感激任何帮助,非常感谢提前。
答案 0 :(得分:0)
ListViews回收视图,因此您只有几个视图可用于所有项目。您正在直接更改其中一个视图实例以在info | brief之间切换。您需要的是保存受影响位置其他地方的info | brief标志的状态(例如,适配器中应该是“briefs”的位置列表)。这样,当你回到getView()
时,你可以显示正确的。{/ p>