2

我是安卓新手。我正在开发一个基于 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:列表的 TextView 无法正确呈现:文本显示为浅灰色,而不是黑色!哦

4

3 回答 3

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

在这种情况下,您将在列表视图中选择不同的活动,输入您的评论以供进一步查询。

于 2012-12-05T17:24:52.033 回答
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);
    }

我有一个映射,它将包含菜单项的数组列表与字符串链接起来,从而导致菜单显示;在单击事件上,我只是根据所选项目的文本检索数组列表。

于 2012-12-06T09:30:18.873 回答
0

使用位置而不是视图来切换点击事件的动作更有用。您的 ListView 应该从某种列表中填充,因此当 onClick 触发时,为您提供位置,您可以在列表中引用该位置以了解单击的内容。

于 2012-12-05T17:02:55.100 回答