我有一个微调器,其中包含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
}
});
提前致谢
答案 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类,将其复制出来并修改它以创建自己的具有这种功能的微调器类。