2012-12-05 38 views
2

我是Android新手。我正在研究一个基于listView的应用程序:你有一个主菜单,当你点击一个项目时,一个新的活动从另一个菜单开始;当您再次点击时,新的活动将从您选择的内容开始。自从我的菜单项目相当多,我已经建立负责处理所有可能的情况下,监听器,所以我类似的东西:Android:在基于listView的应用程序中处理onItemClick()

@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

在我看来,你不应该为此使用ListView。这听起来更像是滚动视图内的线性布局,您可以点击按钮。 – dmon

回答

0

使用位置而不是视图切换click事件的动作更有用。你的ListView应该从某种列表中填充,因此当onClick触发,给你的位置时,你可以在列表中引用该位置以知道被点击的内容。

+0

好吧,我会试试看。怎么样的文字颜色是错误的? – SimoneS93

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

这里在这种情况下,你要去选择列表视图中的项目,把你的意见进一步查询不同的活动。

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

我有一个地图,它将包含菜单项的数组列表与导致菜单显示的字符串链接;在点击事件中,我只需根据所选项目的文本检索数组列表。

相关问题