0

現在、スピナーに 2 つの方法でデータを入力することができます。一方の方法では必要なデータベースから結果が得られますが、スピナーのテキストは JSON 形式です。すべて機能しますが、見栄えが悪くなります。 JSON を使用すると、名前と値のペアの値の部分が失われます。

必要なことを実行するには、BaseAdapter サブクラスを使用する必要があるとの連絡を受けました。以下のコードは、私が望んでいるように機能しますが、データがハードコードされているため、役に立ちません。

私がやりたいことは、データベースから返された JSON データを下の MyData に入力することです。

このコード:

final MyData items[] = new MyData[4];
items[0] = new MyData( "Ken's Plimbing","125738468");
items[1] = new MyData( "Peninsula Pests","3787906453");
items[2] = new MyData( "Joe's Electrical","129754354");
items[3] = new MyData( "Garderning Supplies","097803452");*/

ArrayAdapter<MyData> adapter = new ArrayAdapter<MyData>(PropertyManagement.this, android.R.layout.simple_spinner_item, items );
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
userSpinner.setAdapter(adapter);

userSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            MyData d = items[position];
            Toast.makeText(PropertyManagement.this, d.getValue(), Toast.LENGTH_SHORT).show();
        }
            public void onNothingSelected(AdapterView<?> parent) {
        }
    }
);

この BaseAdapter では:

class MyData {
    public MyData( String spinnerText, String value ) {
        this.spinnerText = spinnerText;
        this.value = value;
    }
    public String getSpinnerText() {
        return spinnerText;
    }
    public String getValue() {
        return value;
    }
    public String toString() {
        return spinnerText;
    }
    String spinnerText;
    String value;

動作します!

しかし、データベースから返された JSON 配列を MyData に入力する必要があります。この投稿の最初の段落に従って、次のようにしています。

ArrayAdapter<String> adapter = new ArrayAdapter<String>(PropertyManagement.this, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

final MyData items[] = new MyData[4];
for (int i = 0; i < myUsers.length(); ++i)
{
    adapter.add(myUsers.getJSONObject(i).getString("BusinessName")); 
};
userSpinner.setAdapter(adapter);

JSONArray/文字列は次のようになります。

{"BusinessName":"Petes Plumbing","BusinessPhone":"0434943743"},{"BusinessName":"Joes Electrical","BusinessPhone":"0466367279"}

どんな助けでも大歓迎です。

乾杯、

マイク。

4

1 に答える 1

0

forループのadapter.addの代わりに、アイテムに追加する必要があります。次のようにリファクタリングします。

final MyData items[] = new MyData[myUsers.length()];
for (int i = 0; i < MyData.length(); ++i){
  items[i] = new MyData(myUsers.getJSONObject(i).getString("BusinessName"), myUsers.getJSONObject(i).getString("BusinessPhone"));
}
ArrayAdapter<MyData> adapter = new ArrayAdapter<MyData>(PropertyManagement.this, android.R.layout.simple_spinner_item, items );
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
userSpinner.setAdapter(adapter);

ここで異なるのは、JSONArray の長さを見つけて、そのサイズの MyItem の新しい配列を作成することです。次に、JSONArray の値に基づいて、新しい MyItems でアイテムを初期化します。最後に、最初の例で行ったのと同じように、項目を使用してアダプターを作成しています。この例では、JSONArray 内の myUsers を想定しています。

于 2011-11-09T23:08:38.733 に答える