0

最近、Android 開発の独学を始めました。現在、ボックスのリストを表示するアプリを作成しています。ボックスをクリックすると、その内容が表示されます。メイン リストの各行ビューには、ボックス名の横に「削除」アイコンがあります。私の ListAdapter は のサブクラスですCursorAdapter。のbindView()方法でCursorAdapterは、次のことを行います。

@Override
public void bindView(View view, Context context, Cursor cursor) {
    TextView name = (TextView) view.findViewById(R.id.text_box_name);
    name.setText(cursor.getString(cursor
            .getColumnIndex(DatabaseContract.BoxEntry.NAME)));
    name.setFocusable(false);
    ImageButton delete = (ImageButton) view.findViewById(R.id.button_box_delete);
    delete.setFocusable(false);
    delete.setTag(cursor.getLong(0));
    delete.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            long id = ((Long) view.getTag());
        }
    });
}

ご覧のとおり、各 ImageButton に、削除するボックスの ID をタグ付けしました。私がここでできるようにしたいのはこれです:

getContentResolver().delete(uri...);

このコードは、ContentProviderそのボックスとそのすべての内容を削除するようにカスタムに指示します。明らかな問題は、 my のコンテキストから、CursorAdapterを呼び出せないことgetContextResolverです。ContentProvider内から私と話すには、どのような方法が最善でしょうCursorAdapterか? 前もって感謝します!

4

1 に答える 1

1

ContextメソッドgetContentResolver()が含まれているため、次のように記述できますbindView

@Override
public void bindView(View view, final Context context, Cursor cursor) {
    TextView name = (TextView) view.findViewById(R.id.text_box_name);
    name.setText(cursor.getString(cursor
        .getColumnIndex(DatabaseContract.BoxEntry.NAME)));
    name.setFocusable(false);
    ImageButton delete = (ImageButton) view.findViewById(R.id.button_box_delete);
    delete.setFocusable(false);
    delete.setTag(cursor.getLong(0));
    delete.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            long id = ((Long) view.getTag());
            context.getContentResolver().delete(uri...);
        }
    });

}

匿名の内部クラスでそれを参照するには、 yourcontextが必要であることに注意してください。final

于 2013-06-02T01:52:16.593 に答える