8

カスタムアダプターの作成に行き詰まっています。ListView 内のボタンに onClickListener を設定したいのですが、このトピックは問題ないように見えますが、問題は getLayoutInflater 行で到達不能なコード エラーが発生することです。 .

ここに私のコードがあります

public class MyCursorAdapter extends SimpleCursorAdapter{

    private final Context ctx;
    private Button tagButton = null;

    public MyCursorAdapter(Context context, int layout, Cursor c,
            String[] from, int[] to) {
        super(context, layout, c, from, to);
        ctx = context;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return super.getView(position, convertView, parent);
        LayoutInflater li = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = li.inflate(R.layout.tags_list_element, null, true);
        tagButton= (Button)rowView.findViewById(R.id.tag_title);
        tagButton.setTag(position);

        tagButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
            }
        });
        return rowView;

    }

}

どちらの方法も私にはうまくいきません

  LayoutInflater inflater = context.getLayoutInflater();

LayoutInflater li = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
4

2 に答える 2

20

試す:

View myView = LayoutInflater.from(ctx).inflate(R.layout.my_view, null);

また、どのような例外がありますか?


編集:「getView」メソッドでは、最初の行は「return .....」であるため、メソッドの残りの部分は実行されません.... ;)

于 2012-05-21T12:25:18.977 に答える
4

パフォーマンスの観点から:

View myView = LayoutInflater.from(context).inflate(R.layout.my_view, parent, false);

正しい; ただし、アダプター内の最終フィールドにインフレータを格納する方が効率的です。

private final Context ctx;
private final LayoutInflater mInflater;
private Button tagButton = null;

public MyCursorAdapter(Context context, int layout, Cursor c,
          String[] from, int[] to) {
    super(context, layout, c, from, to);
    ctx = context;
    mInflater = LayoutInflater.from(ctx);
}

次に、getView 操作を実行します。

//....
final View v = mInflater.inflate(R.layout.list_item, parent, false);
//....
//stuff here
//
return v;

また、コンテキストがアクティビティ コンテキストであることを確認してください。間違ったコンテキストを使用すると、テーマの問題が発生します。

よろしく、クリス

于 2012-05-21T12:30:27.867 に答える