2012-08-08 104 views
0

我有一個微調器,其中包含顯示在兩行中的動態數據。我需要幫助的是在微調控制器文本框中只放棄部分微調值(ItemArrayName [i])。Android - 定義微調器中顯示的值(與選定值不同)

要在彈出窗口中單擊微調框時進行校驗,我需要全文,但是當項目已選擇時,我只需要項目名稱。

例如 內應用: 商品名稱

在微調選擇蹦出: 商品名稱 攻擊力= 10,防守效率= 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 
    } 
}); 

在此先感謝

回答

0

如何使用哈希表來將您在微調器中顯示的內容映射到更詳細的彈出字符串?

編輯: 下面是一個使用哈希表中描述的原始和可能的非編譯修改代碼:

// 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 
     } 
     }); 
+0

請給我一個很好的教程或請提供示例代碼給我,因爲我是Android和Java開發新手。 – 2012-08-08 15:59:41

+0

請參閱上面編輯到我原來​​的帖子。 – Nick 2012-08-08 16:20:39

+0

嗨,尼克,剛剛嘗試過,它不起作用,它只是將'ItemArrayName [i]添加到微調器的兩個部分。任何其他想法?謝謝 – 2012-08-09 16:02:43

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); 

當然這是一個簡化的例子,這可以變得更加靈活,但這是基本的想法。你只是說「這段簡短的文字與這個長文本一起。」

+0

根據尼克斯的回答,我試圖實現這一點,但是這只是簡單地向我展示了微調器兩個部分的縮寫版本,你有沒有其他想法?謝謝 – 2012-08-09 16:08:58

0

每個人都做得比它要困難得多。如果數據已經顯示在微調器中,則可以從那裏抓取數據,而無需參考後備數據。

假設你有一個包含兩個textviews一個的LinearLayout(叫他們TV1和TV2)作爲行佈局的微調,並希望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。

我能想到的一個選擇是在android源代碼中找到微調控件類,將其複製並修改爲使您自己的微調控件類能夠實現這樣的功能。

+0

除非我完全誤解,否則問題是數據已不在微調器中顯示;那裏只顯示縮寫形式。 – Nick 2012-08-08 16:08:07

+0

我的理解是,他在下拉菜單中有完整的顯示,並且希望在關閉的文本框中使用縮略形式。猜測OP需要澄清。 – Barak 2012-08-08 16:13:06

+0

是的,Barak是正確的,我需要在微調框打開時顯示全文,並且只有文本在關閉時才顯示全文。如果在微調控制器中不可行,可以使用此類功能創建多選下拉選項。謝謝 – 2012-08-09 16:05:08