如何从游标加载器填充微调工具? [英] How to populate spinner from cursorloader?
本文介绍了如何从游标加载器填充微调工具?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我花了几天时间来弄清楚这一点,但没有运气。希望我能从这里得到答案。 我尝试使用cursorLoader方法将数据从我的内容提供程序加载到微调中。 微调工具似乎收到了数据,但我在下拉列表中没有找到数据,尽管已经创建了几个下拉项(没有文本)。
我认为问题不是来自我的提供程序,因为如果我使用相同的游标检索数据并将其放入数组中,然后将数组绑定到微调控制项,则它将正确显示所有项。
下面是我的代码,
package com.supreme2u.shopper;
import android.app.Activity;
import android.app.LoaderManager;
import android.content.CursorLoader;
import android.content.Loader;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.NavUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import com.supreme2u.shopper.provider.ShopperProvider;
public class RecordActivity extends Activity implements LoaderManager.LoaderCallbacks<Cursor> {
private SimpleCursorAdapter sAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_record);
getLoaderManager().initLoader(0, null, this);
sAdapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_spinner_item,
null,
new String[] {ShopperProvider.TAG_COLUMN_TAG},
new int[] {R.id.spinner1},
0);
sAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
Spinner v = (Spinner) findViewById(R.id.spinner1);
v.setAdapter(sAdapter);
}
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
CursorLoader cursorLoader = new CursorLoader(
this,
ShopperProvider.CONTENT_URI_TAGS,
ShopperProvider.TAG_COLUMNS,
null,
null,
null);
return cursorLoader;
}
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
sAdapter.swapCursor(arg1);
}
public void onLoaderReset(Loader<Cursor> arg0) {
sAdapter.swapCursor(null);
}
}
和My Layout XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
从我的ShopperProvider类中提取,
public static final Uri CONTENT_URI_TAGS = Uri.parse("content://com.supreme2u.shopper.provider/tableTag");
public static final String TAG_COLUMN_ID = "_id";
public static final String TAG_COLUMN_TAG = "tagName";
public static final String[] TAG_COLUMNS = {"_id","tagName"};
推荐答案
问题出在SimpleCursorAdapter的构造中,特别是第二个和第五个参数(布局和to)。来自文档:
布局:定义此列表项的视图的布局文件的资源标识符。布局文件应至少包括在";到";
中定义的命名视图to:应该在";from";参数中显示的列的视图。这些应该都是TextView。此列表中的前N个视图被赋予From参数中前N列的值。如果游标尚不可用,则可以为NULL。
因此,使用android.R.layout.Simple_Spner_Item进行布局是正确的。但是,为传递到的视图需要是TextView并包含在android.R.layout.simple_spinner_item:中,即android.R.id.ext1,而不是R.id.spner1。
简而言之,改用以下结构:
sAdapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_spinner_item,
null,
new String[] {ShopperProvider.TAG_COLUMN_TAG},
new int[] {android.R.id.text1},
0);
这篇关于如何从游标加载器填充微调工具?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文