2012-08-08 103 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