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());
        }
    });
}

如您所见,我已经用它应该删除的框的 ID 标记了每个 ImageButton。我希望能够在这里做的是:

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...);
        }
    });

}

请注意,您context必须这样final做才能在匿名内部类中引用它。

于 2013-06-02T01:52:16.593 回答