0

2行に表示される動的データを含むスピナーがあります。ヘルプが必要なのは、スピナーテキストボックス内のスピナー値(ItemArrayName [i])の一部のみを表示することです。

スピナーがクリックされたときにポップアップで確認するには、全文が必要ですが、アイテムが選択されている場合は、アイテム名のみが必要です。

例:アプリ内:アイテム名

スピナー選択内でポップアウト:アイテム名Atk = 10、Def = 10

Java Code:

ArrayList<String> ItemArrayList = new ArrayList<String>();  
for(int i = 0; i < ItemArrayName.length; i++)
{
    ItemArrayList.add(ItemArrayName[i] + "\nAtk = " + String.valueOf(ItemArrayAtk[i]) + ", Def = " + String.valueOf(ItemArrayDef[i]));
}

Spinner spnItem = (Spinner) view.findViewById(R.id.UseItem);
ArrayAdapter<String> adpItem = new ArrayAdapter<String> (context, R.layout.spinnerrow, ItemArrayList);
spnItem.setAdapter(adpItem);
spnItem.setOnItemSelectedListener(new OnItemSelectedListener() 
{   
    public void onItemSelected(AdapterView<?> parent, View view, int position, long arg3) 
    {
        //String city = "The item is " + parent.getItemAtPosition(position).toString();
        //Toast.makeText(parent.getContext(), city, Toast.LENGTH_LONG).show();
    }

    public void onNothingSelected(AdapterView<?> arg0)
    {
        // TODO Auto-generated method stub
    }
});

前もって感謝します

4

3 に答える 3

1

ハッシュテーブルを使用して、スピナーに表示する内容をより詳細なポップアップ文字列にマッピングするのはどうですか?

編集:これは、説明されているように、ハッシュテーブルを使用したコードへの原始的でおそらくコンパイルされていない変更です:

// EDIT #1: Create a hashtable to lookup stuff:
final Hashtable<String, String> vals = new Hashtable<String, String>();

      for(int i = 0; i < ItemArrayName.length; i++)
      {
         vals.put(ItemArrayName[i], ItemArrayName[i] + "\nAtk = " + String.valueOf(ItemArrayAtk[i]) + ", Def = " + String.valueOf(ItemArrayDef[i]));
      }

      Spinner spnItem = (Spinner) view.findViewById(R.id.UseItem);
      // EDIT #2: Extract the array of hash keys to show in your list:
      ArrayAdapter<String> adpItem = new ArrayAdapter<String> context, R.layout.spinnerrow, vals.keySet().toArray(new String[vals.size()]));
      spnItem.setAdapter(adpItem);
      spnItem.setOnItemSelectedListener(new OnItemSelectedListener()
      {
         public void onItemSelected(AdapterView<?> parent, View view, int position, long arg3)
         {
            // EDIT #3: retrieve the full string from the hashtable using "get":
            String city = "The item is " + vals.get(parent.getItemAtPosition(position).toString());
            //Toast.makeText(parent.getContext(), city, Toast.LENGTH_LONG).show();
         }

         public void onNothingSelected(AdapterView<?> arg0)
         {
            // TODO Auto-generated method stub
         }
      });
于 2012-08-08T15:53:33.947 に答える
0

短いテキストを長いテキストにマッピングしてみてください。

HashMap<String,String> itemValues = new HashMap<String,String>();
itemValues.add("short text","the full long text that pops up when item is selected");

String longTextToDisplay = itemValues.get(currentSelectedShortText);

もちろん、これは単純化された例であり、これをより柔軟にすることができますが、これは基本的な考え方です。あなたはただ「この短いテキストはこの長いテキストと一致する」と言っているだけです。

于 2012-08-08T15:59:02.257 に答える
0

誰もがこれを必要以上に難しくしています。データがすでにスピナーに表示されている場合は、バッキングデータを参照せずにそこからデータを取得できます。

スピナーの行レイアウトとして2つのテキストビュー(tv1とtv2と呼びます)を含むLinearLayoutがあり、tv2の値が必要な場合は、次のように実行できます。

public void onItemSelected(AdapterView<?> parent, View view, int position, long arg3)  
{ 
    TextView tvResult = (TextView) view.findViewById(r.id.tv2);
    String city = tvResult.getText().toString();
} 

編集

私はあなたの質問を誤解しました...ArrayAdapterを使用して、閉じたスピナーボックスにスピナー内の実際の選択とは異なるテキストを表示させる方法がないことを知っています。もしあれば、私はそれについて見たり読んだりすることに興味があります。

CursorAdapterを使用してそれを行う方法を考えることはできますが、上で述べたように、ArrayAdapterでそれを管理する方法を考えることはできません。

私が考えることができる1つのオプションは、Androidソースでスピナークラスを見つけ、それをコピーして変更し、そのような機能を実行できる独自のスピナークラスを作成することです。

于 2012-08-08T16:02:27.820 に答える