如何在列表视图项中显示和隐藏视图?
Posted
技术标签:
【中文标题】如何在列表视图项中显示和隐藏视图?【英文标题】:how to visible and hide view in listview item? 【发布时间】:2015-01-15 13:39:42 【问题描述】:我有一个列表视图,在列表视图中我有一个文本视图。所以这个文本视图在列表视图的每一项中都是可见的。因此,当我单击任何 Textview 时,它的可见性必须消失。但是,当我单击另一个文本视图时,当前必须消失,而上一个必须可见。 在适配器类中我尝试了很多东西,但我没有找到正确的方法。那么如何在 getView() 中得到这个东西。
holder.floorNo.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
if (holder.floorNo.getId() == v.getId())
final int position1 = listView
.getPositionForView((LinearLayout) v
.getParent());
else
);
这里的 position1 是点击的当前位置。请帮帮我。
【问题讨论】:
这项工作是使用 javabeen getset 方法完成的,只要您单击名为 notifatdatasetchange 的按钮 【参考方案1】:您可以将 textview 的标签设置为 holder.settag(holder.floorNo)。在 floorNo 的点击列表中,通过 Textview floorno = (Textview) v.gettag() 获取此标签; 在这里,您将获得单击的文本视图并为可见/不可见添加代码。
【讨论】:
【参考方案2】:我不知道您使用的是哪个适配器。如果您使用的是 CursorAdapter,那么在 CursorAdapter 中通过覆盖方法 newView() 是可能的
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent)
((TextView) (convertView
.findViewById(R.id.main_body_item_title_second_pics)))
.setOnClickListener(new OnClickListener()
@Override
public void onClick(View view)
// do your stub here
);
【讨论】:
我正在使用 ArrayAdapter您可以使用 textview 类成员作为“提醒”以了解隐藏了哪个 textview,如下所示:
private View mHiddenView = null
private int mFloorNoId = 0
....
....
holder.floorNo.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
if(mHiddenView !=null&&mFloorNoId!=0)
// Show textview that was hidden
mHiddenView.findViewById(mFloorNoId).setVisibility(VISIBLE);
// Assign clicked view to hidden one and FloorNo id
mHiddenView = v;
mFloorNoId = holder.floorNo.getId();
// And hide it
mHiddenView.findViewById(mFloorNoId).setVisibility(GONE);
);
【讨论】:
我只需要隐藏“holder.floorNo”并显示相同的内容。那么我将如何实现呢? floorNo 是 textview 吗?如果是,您可以在mHiddenTextview = (Textview) v;
中使用它代替 v
是的,但它不起作用。我想我需要在每次点击 textview 时刷新列表视图,但我不知道怎么可能。
您可以通过在适配器上/内调用 notifyDataSetChanged 来刷新列表视图
但我无法在 onClick() 中调用 notifyDataSetChange()。【参考方案4】:
在适配器中维护一个布尔值列表,指示 TextView holder.floorNo 的可见性。
boolean[] visibilityArray;
在构造函数中
visibilityArray; = new boolean[ no. Of Elements in your adapter ];
在getView()方法中
holder.floorNo.setVisibility(visibilityArray[position]);
holder.floorNo.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
notifyStateChange(position);
);
notifyStateChange(position)方法定义如下
private void notifyStateChange(int position)
for(int i = 0; i<visibilityArray.length; i++)
visibilityArray[i] = true;
visibilityArray[position] = false;
this.notifyDataSetChanged();
【讨论】:
以上是关于如何在列表视图项中显示和隐藏视图?的主要内容,如果未能解决你的问题,请参考以下文章