我是android新手。我需要从SQLite数据库中填充微调器。 我的布局>> main.xml包含
<Spinner
android:id="@+id/cmbLocations"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
android:prompt="@string/location_prompt"
/>
<EditText android:id="@+id/text1" android:layout_width="300dp" android:layout_height="wrap_content"/>
我有一个返回位置的公共函数:
public static final String KEY_ROWID = "_id";
public static final String KEY_LOCATION = "location";
public Cursor GetLocations()
{
return db.query(DATABASE_TABLE,
new String[]
{
KEY_ROWID, // "_id"
KEY_LOCATION // "location"
}, null, null, null, null, null);
}
填充微调器的代码是:
Spinner cmbLocations = (Spinner) findViewById(R.id.cmbLocations);
DBAdapter db = new DBAdapter(this);
db.open();
Cursor cur = db.GetLocations();
String[] from = new String[]{"_id","location"};
int[] to = new int[]{R.id.text1};// I don't know that why text1 is required here
startManagingCursor(cur);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_spinner_item, cur, from, to);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
cmbLocations.setAdapter(adapter);
db.close();
我面临的问题是微调控件显示EMPTY位置。例如,如果我有两个位置,Location1&amp; LOCATION2。微调器将显示两个EMPTY位置。如果我有3个位置,微调器将显示三个EMPTY位置。
提前感谢您的帮助。
答案 0 :(得分:2)
要使R.id.text1工作(而不是android.R.id.text1),您的资源中必须有一个TextView,其中包含此ID:R.id.text1。例如:
<强> spin_layout.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:id="@+id/field1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp" />
<TextView
android:id="@+id/field2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp" />
</LinearLayout>
现在您可以在适配器中使用:
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
R.layout.spin_layout,
ur_cursor,
new String[] {"Field1_in_ur_cursor", "Field2_in_ur_cursor"},
new int[] {R.id.field1, R.id.field2}, 0);
adapter.setDropDownViewResource(R.layout.spin_layout);
它将“Field1_in_ur_cursor”绑定到R.id.field1,将“Field2_in_ur_cursor”绑定到R.id.field2,用于具有布局spin_layout.xml的微调器。
答案 1 :(得分:1)
尝试使用:
String[] from = new String[]{"_id","location"};
int[] to = new int[]{R.id.text1,R.id.text2};// I don't know that why text1 is required here
int[] to
用于放置光标中的值,您定义的是..例如,您要获取_id和位置,然后您必须指定其目标,此处它可能是textview。
答案 2 :(得分:0)
你的数组应该是{“location”}
看看这里:
这显示了微调器'simple_spinner_item'实际上在做什么,它解释了你的r.id.text1是什么。
您将两列传递到Spinner但只想显示一列。
在Cursor周围打印一些日志,看它是否真的包含数据。
答案 3 :(得分:0)
我有两个要在spinner上显示的列以及何时:尝试使用类似的代码;
String[] from = new String[]{"_id","location"};
int[] to = new int[]{R.id.text1,R.id.text2};
它不起作用。当我把它改为:
String[] from = new String[]{"_id","location"};
int[] to = new int[]{android.R.id.text1,android.R.id.text1};
它对我有用。