1

我在 SO 和其他网站上找到了很多关于如何Spinner用 a填充 a 的答案Cursor,但它们都使用不推荐的SimpleCursorAdapter(Context, int, String[], int[])构造函数来做到这一点。似乎没有人描述如何使用 API 级别 11 及更高级别执行此操作。

API 告诉我使用LoaderManager,但我不确定如何使用它。

4

2 回答 2

2

似乎没有人描述如何使用 API 级别 11 及更高级别执行此操作。

该文档通过向您展示一个与您尝试使用的构造函数相同的非弃用构造函数int flags,并带有一个额外的参数。0如果没有可用的标志值对您有用,则传递标志。

于 2013-05-07T11:05:07.427 回答
1

我建议实现您自己的 CursorAdapter 而不是使用 SimpleCursorAdapter。

实现 CursorAdapter 并不比实现任何其他 Adapter 难。CursorAdapter 扩展了 BaseAdapter,并且 getItem()、getItemId() 方法已经为您覆盖并返回实际值。如果您确实支持 pre-Honeycomb,建议使用支持库 (android.support.v4.widget.CursorAdapter) 中的 CursorAdapter。如果你只是11后,就用android.widget.CursorAdapter 注意调用swapCursor(newCursor)时不需要调用notifyDataSetChanged();

import android.widget.CursorAdapter;

public final class CustomAdapter
        extends CursorAdapter
{

    public CustomAdapter(Context context)
    {
        super(context, null, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
    }


    // here is where you bind the data for the view returned in newView()
    @Override
    public void bindView(View view, Context arg1, Cursor c)
    {

        //just get the data directly from the cursor to your Views.

        final TextView address = (TextView) view
                .findViewById(R.id.list_item_address);
        final TextView title = (TextView) view
                .findViewById(R.id.list_item_title);

        final String name = c.getString(c.getColumnIndex("name"));
        final String addressValue = c.getString(c.getColumnIndex("address"));

        title.setText(name);
        address.setText(addressValue);
    }

    // here is where you create a new view
    @Override
    public View newView(Context arg0, Cursor arg1, ViewGroup arg2)
    {
        return inflater.inflate(R.layout.list_item, null);
    }

}
于 2013-05-07T14:36:02.820 回答