0

ListViewusingを生成しましたBaseAdapter。リストビューに2つButtonあります。行の Button2 がクリックされたときに、Button1 を非表示にしたいと考えています。次に、別の行の Button2 がクリックされたときに、現在の行の Button1 を非表示にし、以前に非表示だった Button1 を表示するようにします。つまり、一度に 1 つの行の 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;
    }
4

1 に答える 1

0

hidden Button別のアイテムButtonがクリックされたときに表示されるようにするには、最後のビューを保持する必要があります。

まず、静的変数を宣言してBaseAdapterhidden 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最後に、 andgetViewTypeCountをオーバーライドして、すべてのアイテム ビュー タイプが異なることをBaseAdapter知らせます。ListView

@Override
public int getItemViewType(int position){
    // return a unique number
    return position;
}

@Override
public int getViewTypeCount() {
    return getCount();
}
于 2014-05-15T02:13:37.407 に答える