我使用ListView
生成了BaseAdapter
。我的Listview中有2个Button
。我想在点击行中的Button2时使我的Button1不可见。然后,当单击另一行的Button2时,我想使当前行中的Button1不可见,并且先前不可见的Button1可见,即一次只有一行的Button1应该是不可见的。我已经完成了以下操作,但我不知道如何在单击的行中设置Button1的可见性。请一步一步指导我。我的适配器代码如下:
private class ListAdapter extends BaseAdapter {
LayoutInflater inflater;
ViewHolder viewHolder;
public ListAdapter(Context context) {
// TODO Auto-generated constructor stub
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return _productlist.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return _productlist.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
private final boolean[] mHighlightedPositions = new boolean[getCount()];
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if (convertView == null) {
convertView = inflater.inflate(R.layout.listview_row, null);
viewHolder = new ViewHolder();
viewHolder.Button1 = (Button) convertView
.findViewById(R.id.btn_update);
convertView.setTag(viewHolder);
viewHolder.Button2 = (Button) convertView
.findViewById(R.id.btn_update2);
convertView.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.Button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(mHighlightedPositions[position]) {
viewHolder.Button1.setVisibility(convertView.INVISIBLE);
}
}
});
return convertView;
}
答案 0 :(得分:0)
您需要保留上一个hidden Button
视图,以便在点击其他项目Button
时显示该视图。
首先,在BaseAdapter
中声明一个静态变量来保存hidden Button
private static Button lastHiddenButton = null;
接下来,将点击监听器添加到Button2
,然后隐藏Button1
并使最后隐藏的Button
可见
final Button hideButton = placeHolder.button1;
placeHolder.button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// if the last hidden button is valid make it to visible
if(lastHiddenButton != null){
lastHiddenButton.setVisibility(View.VISIBLE);
lastHiddenButton = null;
}
// hide button1
hideButton.setVisibility(View.GONE);
lastHiddenButton = hideButton;
}
});
这将确保在点击Button2
时,Button1
属于所点击的行将被隐藏。
通过此更改,您会注意到由于Buttons
回收,其他几行ListView
也会被隐藏。要解决此问题,您需要通知ListView
我的所有列表项视图都不同。当您拥有ListView
项时,这会对hundreds
效果产生影响,但您无法避免这种情况
最后,覆盖getItemViewType
中的getViewTypeCount
和BaseAdapter
,让ListView
知道所有项目视图类型都不同
@Override
public int getItemViewType(int position){
// return a unique number
return position;
}
@Override
public int getViewTypeCount() {
return getCount();
}