0

Baseadapter を拡張するカスタム アダプターを使用したリストビューがあります。リストビューの各行には、テキストビューとボタンがあります。デフォルトでは、ボタンは非表示状態です。アダプターの getView メソッドで view.OntouchListener を呼び出しています。行がスワイプされると、その位置でボタンが表示されます。他の行がスワイプされると、現在の位置以外の他の行のすべてのボタンが非表示になります。

どんな助けでも大歓迎です。

ありがとう、プラシャント。

4

1 に答える 1

0

アダプターのボタンの可視状態を維持する必要があると思います。あなたの下に、テキストがクリックされたときにボタンを表示する方法についての例 (まだテストされていません) を追加しました (他のボタンは非表示になります)。

com.test.data.ExportOption をインポートします。

public class 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;
}   

}

于 2013-08-07T08:18:23.393 に答える