0

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

To calrify in the popup when the spinner is clicked, I require the full text, however when the item has been select I only require the item name.

例如在应用程序内:项目名称

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

如何使用 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
         }
      });
于 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

每个人都使这比必须的要困难得多。如果数据已经显示在微调器中,您可以从那里抓取它,而无需参考支持数据。

假设您有一个包含两个文本视图(称为 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 类,将其复制出来并修改它以制作您自己的具有此类功能的 spinner 类。

于 2012-08-08T16:02:27.820 回答