我有一个自定义适配器的列表视图,它扩展了Baseadapter。在listview的每一行中,我都有一个textview和一个按钮,默认情况下该按钮处于Invisible状态。我在Adapter的getView方法中调用view.OntouchListener,当行被刷过时我在该位置创建按钮可见。当另一行被刷过时,除了当前位置1之外,其他行中的所有按钮都应该是Invisible。
任何帮助都是赞赏的。
谢谢, 普拉香特
答案 0 :(得分:0)
我认为您必须保持适配器中按钮的可见性状态。 在下面我添加了一个示例(尚未测试),关于如何在单击文本时显示按钮(任何其他按钮将被隐藏)。
import com.test.data.ExportOption;
公共类ExportOptionsAdapter扩展了BaseAdapter {
// Constants
private final static String TAG = "ExportOptionsAdapter";
// Data
private ArrayList<ExportOption> mItems;
private Context mContext;
private LayoutInflater mLf;
private ListView mParent;
public ExportOptionsAdapter(Context pContext) {
mItems = new ArrayList<ExportOption>();
mContext = pContext;
mLf = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public ExportOptionsAdapter add(ExportOption pOption){
mItems.add(pOption);
return this;
}
public ExportOptionsAdapter add(ArrayList<ExportOption> exportOptions) {
mItems.addAll(exportOptions);
return this;
}
public int getCount() {
return mItems.size();
}
public ExportOption getItem(int position) {
return mItems.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh;
if(null == mParent){
mParent = (ListView) parent;
}
if(null == convertView){
convertView = (View)mLf.inflate(R.layout.export_option, parent, false);
vh = new ViewHolder();
vh.option = (TextView)convertView.findViewById(R.id.option_name);
vh.btn = (Button)convertView.findViewById(R.id.btn);
convertView.setTag(vh);
} else {
vh = (ViewHolder)convertView.getTag();
}
vh.option.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int position = mParent.getPositionForView(v);
if(AdapterView.INVALID_POSITION != position){
for(int i = 0; i < mItems.size(); i++){
if(i == position){
// mark the selected one as visible
mItems.get(position).markButtonAsVisible(true);
} else {
// hide the other items
mItems.get(position).markButtonAsVisible(false);
}
}
}
}
});
vh.option.setText(mItems.get(position).getType());
if(mItems.get(position).buttonMarkedAsVisible()){
vh.btn.setVisibility(View.VISIBLE);
} else {
vh.btn.setVisibility(View.GONE);
}
return convertView;
}
private class ViewHolder{
public TextView option;
public Button btn;
}
}