Android - 定义微调器内显示的值(与所选值不同)

时间:2012-08-08 15:47:24

标签: java android spinner

我有一个微调器,其中包含2行显示的动态数据。我需要帮助的是在微调器文本框中仅消除部分微调器值(ItemArrayName [i])。

要在单击微调器时在弹出窗口中进行校准,我需要全文,但是当项目被选中时我只需要项目名称。

e.g。 在App中: 商品名称

在微调器选择内弹出: 项目名称 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
    }
});

提前致谢

3 个答案:

答案 0 :(得分:1)

如何使用Hashtable将您在微调器中显示的内容映射到更详细的弹出字符串?

编辑: 这是使用哈希表描述的代码的原始的,可能是非编译修改:

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

答案 1 :(得分: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);

当然这是一个简化的例子,这可以更灵活,但这是基本的想法。你只是说“这篇短文与这篇长篇文章有关。”

答案 2 :(得分:0)

每个人都比以前更加努力。如果数据已经在微调器中显示,您可以从那里抓取它,而不必参考后备数据。

假设你有一个包含两个textview(称为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。

我能想到的一个选项是在android源代码中找到spinner类,将其复制出来并修改它以创建自己的具有这种功能的微调器类。