2011-07-26 3 views
0

私はAndroidリストとSpinnerで使用するためにそれらを変換する方法に苦しんでいます。文字列配列をSpinnerに入れるのは非常に簡単なので、Listを使って同じことをやっているのは簡単かもしれません。しかし、この時点では、リストをSpinnerのArrayAdapterで使用するための適切なフォーマットにする方法を理解できません。ここで私はアカウント名とスピナーのリストを持っています。どのようにスピナーをリストに入れるのですか?

は、データベースからアカウント名のリストを取得するために私のコードです:返された「リスト」から

//---retrieves all the accounts matching the account_type--- 
    public List getAccounts(String account_type) {  
     List<String> list = new ArrayList<String>(); 
     Cursor cursor = this.db.query(DBACCOUNTS, new String[] { 
       ID, 
       ACCOUNTTYPE, 
       ACCOUNTNUMBER, 
       ACCOUNTNAME}, 
       ACCOUNTTYPE + " = " + "'" + account_type + "'", 
       null, 
       null, 
       null, 
       null, 
       null); 
     if (cursor.moveToFirst()) { 
      do { 
       //---account_name column number is 3--- 
       list.add(cursor.getString(3)); 
      } while (cursor.moveToNext()); 
     } 
     if (cursor != null && !cursor.isClosed()) { 
      cursor.close(); 
     } 

     return list; 
    } 

を、私は私のスピナーを移入するために何をすべきかが必要ですか?次のコードは明らかに文字列配列ですが、同様の機能を持つListを作成するために必要なものは失われています。ここに私の非稼働ArrayAdapterコードは(account_name_arrayを上から返された「リスト」に設定されている)です。

account_name_spinner = (Spinner) findViewById(R.id.account_name_spinner);  
account_name_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, account_name_array); 
account_name_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
account_name_spinner.setAdapter(account_name_adapter); 

私はしかし、私はArrayAdapterは、文字列配列を期待していることを知って、私は遠く離れて、ここで追跡しています知っています、私が言ったように、私は正しい方向への良いプッシュが必要です。明らかに、リストを文字列配列に変換するか、リストにスピナーを適合させる方法を変更する必要があります。 Androidは私が理解するのが非常に難しく、PHPのバックグラウンドから来ているよりも多くのデータ構造やデータ型のルールがあります。

あなたは大歓迎です!

+0

これはエラーを示していますか? –

答えて

2

toArrayを使用してリストを配列に変換します。

List<String> list = new ArrayList<String>(); // Your list 
// Populate it 

// Then get an array: 
String[] array = list.toArray(new String[0]); 
+0

ありがとう、シンプル!私はこれを正しく理解していますか? .toArray関数がArrayListから文字列配列に変換するために必要な一時配列を保持するように、 "new String [0]"が初期化されていますか?結果の数を数え、新しいString []を最適に初期化する必要がありますか? – AutoM8R

+1

'toArray'のパラメータには2つの目的があります。最初のものは返す配列の型を伝えることです。 2番目の(オプション)目的は、結果を保持することです。渡す配列が十分大きければ、その配列に結果が返されます。そうでない場合は、新しい配列が作成されます。 – trutheality

1

私は同様の問題というよりスピナーにリストから行くが、私はちょうど私が私のDBから引っ張った方法を変更し、私は自分のDB内の行数を返され、別の方法で書いていた:

public int RowCount() { 
    String count = "Select COUNT(_id) from " + TABLE_NAME; 
    return (int) db.compileStatement(count).simpleQueryForLong(); 
} 
あなたがすでに行う方法を知っているようだと、私は、カーソルを使用してその配列を埋め

String []myArray = new String[db.RowCount()]; 

私は、配列を宣言しました。

+0

ありがとう、しかし、私はそれをリスト上の機能を使用することができるように、この時点でArrayListとして保持したいと思います。 – AutoM8R

2

account_name_arrayがArrayListの場合、これをString []に変換してアダプタに渡す必要があります。

String[] account_names = account_name_array.toArray(new String[account_name_array.size()]); 
account_name_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, account_names); 
関連する問題