2012-12-05 66 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); 
    } 

我有一個地圖,它將包含菜單項的數組列表與導致菜單顯示的字符串鏈接;在點擊事件中,我只需根據所選項目的文本檢索數組列表。

相關問題