Android微调器显示EMPTY值

时间:2011-10-04 13:30:56

标签: android spinner

我是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位置。

提前感谢您的帮助。

4 个答案:

答案 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 Source

这显示了微调器'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};

它对我有用。