1

リストビュー (各項目がボタン) を実装しましたが、ViewHolder を使用して効率を改善したいと考えています。ここに私の問題があります。これらのボタンの OnClick メソッドをどこでオーバーライドする必要があるかわかりません。

これは私の ArrayAdapter の getView です:

public View getView(final int position, View convertView, ViewGroup parent) {  
    ViewHolder view;  
    if(convertView==null)  
    {  
        view = new ViewHolder();  
        LayoutInflater inflator = activity.getLayoutInflater();  
        convertView = inflator.inflate(R.layout.layout_opcion, null);  
        view.b_opcion = (Button) convertView.findViewById(R.id.boton_opcion);
        **view.b_opcion.setOnClickListener(new View.OnClickListener() {...});**
        convertView.setTag(view);  
    }  
    else  
    {  
        view = (ViewHolder) convertView.getTag();  
    }
    **view.b_opcion.setOnClickListener(new View.OnClickListener() {...});**
    view.b_opcion.setText(getItem(position));  
    return convertView;  
}  

}

この OnClick メソッドは、選択したアイテムに関する情報を表示する必要があるため、ここに私の質問があります。内部でこのメソッドをオーバーライドできますか

if(convertView==null) {こちら}

(それを一度だけ行うため)?または、それに対して、この IF 内には、膨張するレイアウトを参照するコード行だけが必要ですか?

4

2 に答える 2

0

if 文の後にしたい。if ステートメント内では、View の UI 要素への参照のみを取得します。if ステートメントの後、変更を加えたり、リスナーを設定したりできます。

于 2012-04-23T13:43:56.687 に答える
0

行の識別情報 (ID や位置など) を定義するパラメーターをビュー ホルダーに配置します。

この情報を、使用している if の外側に設定します (view.b_opcion.setText(... の直前または直後)。

OnClickListener を実装するリスナー クラスを定義し、同じ 1 つのインスタンスを最初の if ステートメント内のすべてのビューにアタッチします。

onlickリスナーでは、getTagを呼び出して表示し、オブジェクトをビューホルダーに変換してから、ビューホルダーからID/位置を取得できます。その後、オブジェクトに到達し、ビュー、アダプター項目など、持っているデータに対して必要なことを行うことができます。

于 2012-04-24T08:36:40.290 に答える