我是Android新手。我正在开发一个基于listView的应用程序:你有一个主菜单,当你点击一个项目时,一个新的活动从另一个菜单开始;再次单击时,新活动将从您选择的内容开始。因为我有很多菜单项,所以我要创建一个处理所有可能情况的监听器,所以我有类似的东西:
@Override public void onItemClick(AdapterView<?> listAdapter, View v, int position, long id) {
String text = ((TextView)v).getText().toString();
//main menu
if (text.equals(K.getStringById(K.ID_MAIN_THEORY))) {
...
} else if (text.equals(K.getStringById(K.ID_MAIN_EXERCISE))) {
...
}
else if (text.equals(K.getStringById(K.ID_MAIN_TABLES))) {
...
}
//here other menus' items: lots of items
...
//back item
else if (text.equals(K.getStringById(K.ID_BACK))) {
activity.finish();
}
Intent i = new Intent(...);
startActivity(i);
}
* K is a class that holds ids' references
有一种方法可以避免对侦听器行为进行硬编码吗?
** PS:列表'TextViews无法正常渲染:文本显示为浅灰色,而不是黑色! O.o
答案 0 :(得分:0)
使用position而不是view来切换click事件的动作更有用。您的ListView应该从某种List中填充,因此当onClick触发时,为您提供位置,您可以在列表中引用该位置以了解所点击的内容。
答案 1 :(得分:0)
如果你想点击项目并在结果中它会转到另一个活动,例如,如果你有三个项目,当你点击项目A时,它会将你重定向到活动A,如果B然后重定向到B,依此类推,
lstview.setOnItemClickListener(new OnItemClickListener()
{
private String input;
public void onItemClick(AdapterView<?> v, View arg1, int index,long arg3)
{
if(index==1)
{
Intent intnt=new Intent(v.getContext(),A.class);
startActivity(intnt);
}
else if (index==2)
{
Intent intnt=new Intent(v.getContext(),B.class);
startActivity(intnt);
}
else
{
Intent intnt=new Intent(v.getContext(),C.class);
startActivity(intnt);
}
}
}
在这种情况下,您将在列表视图中选择项目时进行不同的活动,将您的注释放入进一步查询。
答案 2 :(得分:0)
我解决了这个问题:我认为这很不错。
//This in K class, where MAPPED_HIERARCHY is a static field
static void activity(android.app.Activity a) {
MAPPED_HIERARCHY = new HashMap<String, ArrayList<String>>();
MAPPED_HIERARCHY.put(a.getResources().getString(R.string.app_name), K.array2list(a.getResources().getStringArray(R.array.menu_main)));
MAPPED_HIERARCHY.put(a.getResources().getString(R.string.main_theory), K.array2list(a.getResources().getStringArray(R.array.menu_theory)));
MAPPED_HIERARCHY.put(a.getResources().getString(R.string.main_exercise), K.array2list(a.getResources().getStringArray(R.array.menu_exercise)));
....
}
static ArrayList<String> getArrayListByString(String string) {
ArrayList<String> copy = new ArrayList<String>(MAPPED_HIERARCHY.get(string).size());
for (String s : MAPPED_HIERARCHY.get(string))
copy.add(s);
return copy; //defensive copy
}
//This in my listener class
@Override public void onItemClick(AdapterView<?> listAdapter, View v, int position, long id) {
String text = ((TextView)v).getText().toString();
ArrayList<String> params = K.getArrayListByString(text);
Intent i = new Intent(...);
i.putExtra("params", params);
activity.startActivity(i);
}
我有一张地图,它将包含菜单项的arraylist与导致菜单显示的字符串链接起来;在click事件中,我只是根据所选项目的文本检索arraylist。