2

Eclipse を使用して Android 用のアプリを作成しましたが、すべてが機能しますが、Spinner をクリックすると、プロンプトが空に見えますが、選択できるので値が表示されます。それらを表示するにはどうすればよいですか? エミュレーターでは機能しますが、電話では機能しません。ありがとう!

空白の四角はプロンプトで、値があります。:S

    String sqlSelect = "SELECT id, name, password FROM password";
    Cursor c = db.rawQuery(sqlSelect, null);            


    Spinner sp1 = (Spinner)findViewById(R.id.spinner1);
    ArrayAdapter<String> ad = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
    ad.setDropDownViewResource(android.R.layout.simple_spinner_item);
    sp1.setAdapter(ad);        

    System.out.println("Total of records is:" + c.getCount());

    if(c.moveToFirst()){
        int i = 0;

        while(c.moveToNext()){
            ad.add(c.getString(c.getColumnIndex("name")));              
            i++;
        }
    }        

レイアウト:

<Spinner
    android:id="@+id/spinner1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
    <!-- Preview: listitem=@android:layout/simple_spinner_item -->
</Spinner>

画像は次のとおりです。

http://img163.imageshack.us/img163/659/cap201205222344.jpg

4

3 に答える 3

1

投稿された画像では、スピナーがいくつかの行を表示していますが、データベースから値を取得していることを意味しますが、スピナーアイテムの背景色を変更する必要があります。

テキスト サイズと背景サイズの両方が白であるため、スピナー ビュー内でテキストを表示できないため、カスタム アダプターを使用してスピナーを作成するか、スピナー アイテムを変更してみてください。

ad.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
于 2012-05-23T06:20:57.320 に答える
1

私が見つけた例によると、ArrayAdapter のサブクラスを使用することになりました。

    ArrayAdapter<String> ad = new ArrayAdapter<String>(this,        android.R.layout.simple_spinner_item){
        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent) {
            View view = super.getDropDownView(position, convertView, parent);

            TextView text = (TextView)view.findViewById(android.R.id.text1);
            text.setTextColor(Color.BLUE);

            return view;
        }           
    };

アイテムが表示されるようになりましたが、エミュレータではアイテムが表示されたのに、電話自体では表示されなかったのはなぜでしょうか... ありがとうございます!!

于 2012-05-24T06:29:01.097 に答える
0

これを使用するnotifyDataSetChanged()と、スピナーが再描画されます。

if(c.moveToFirst()){  
    int i = 0;  
    while(c.moveToNext()){  
        ad.add(c.getString(c.getColumnIndex("name")));                
        i++;  
}  
ad.notifyDataSetChanged();
于 2012-05-23T06:12:25.790 に答える