Android Listview使getview中的按钮不可见

时间:2013-08-07 07:32:18

标签: android android-listview

我有一个自定义适配器的列表视图,它扩展了Baseadapter。在listview的每一行中,我都有一个textview和一个按钮,默认情况下该按钮处于Invisible状态。我在Adapter的getView方法中调用view.OntouchListener,当行被刷过时我在该位置创建按钮可见。当另一行被刷过时,除了当前位置1之外,其他行中的所有按钮都应该是Invisible。

任何帮助都是赞赏的。

谢谢, 普拉香特

1 个答案:

答案 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;
}   

}