0

私は使用して作成されたボタンの数を持つ各行でカスタムアダプターを使用しています、

@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowview = (HorizontalScrollView) inflater.inflate(
            R.layout.hrowlayout, parent, false);
LinearLayout ll1 = (LinearLayout) rowview.findViewById(R.id.ll);    
Button[] b = new Button[M];     
    for (int i = 0; i < M; i++) {
        b[i] = new Button(ll1.getContext());
        b[i].setText(....);
        LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams( x, 90);
        b[i].setLayoutParams(param2);
        ll1.addView(b[i],params2);
        }
 return rowview;   
}

私の質問は、このアダプターでViewHolderを使用する方法と、XMLファイルにないボタンにタグを付ける方法です..つまり

b[i] = new Button[M];
4

2 に答える 2

1

ViewHolder パターンの ViewHolder は、ビューのコンテンツへの参照を保持するだけのダム オブジェクトであり、inflate() と findViewById() の繰り返し使用を避けるため、必要なものと一緒に Button 配列を ViewHolder に貼り付けることができます。参照する。

このようなものは、あなたがそれを行う方法です。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    ViewHolder holder;
    if(convertView == null){//if we haven't already created a view
        //inflate a new view
        View rowview = (HorizontalScrollView) inflater.inflate(
        R.layout.hrowlayout, parent, false);
        LinearLayout ll1 = (LinearLayout) rowview.findViewById(R.id.ll);

        Button[] b = new Button[M];     

        for (int i = 0; i < M; i++) {
            b[i] = new Button(ll1.getContext());
            b[i].setText(....);
            LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams( x, 90);
            b[i].setLayoutParams(param2);
            ll1.addView(b[i],params2);
        }

        convertView = rowview;
        holder = new ViewHolder();
        holder.buttons = b;
        convertView.setTag(viewHolder);
    }

    holder = convertView.getTag()
    for(Button button : holder.buttons){
        //do something
    }


    return convertView;   
}

とビュー ホルダー

class ViewHolder{
    Button [] buttons;
    //other things
}
于 2013-05-23T11:11:50.993 に答える