0

我目前有一個列表視圖,我試圖將列表視圖指向不同的活動。所以,如果你點擊一個項目讓我們說1-4你會得到相應的類。我能想到的唯一方法就是抓取列表視圖中的項目文本並啓動該名稱的活動。它的代碼會去是這樣的:在Android中調用一個變量是一個變量

final String chosen = ""; 
chosen = (String) ((TextView) view).getText(); 
Intent nextScreen = new Intent(getApplicationContext(), chosen.class); 

這是行不通的。我在最後一行發現錯誤,說選擇不能解析爲類型。

我知道((TextView) view).getText()作品,因爲

Log.d("Debug", "Test"+((TextView) view).getText()); 

讓我在logcat中正確的選擇項。

任何意見/建議?在此先感謝

編輯:

我試圖改變我的代碼如下:

String chosen = (String) ((TextView) view).getText(); 
try { 
    Intent nextScreen = new Intent(getApplicationContext(), Class.forName(chosen)); 
    startActivity(nextScreen); 
    Log.d("Debug", "Good"+((TextView) view).getText()); 
    } 
catch (ClassNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    Log.d("Debug", "Bad"+((TextView) view).getText()); 
    } 
    Log.d("Debug", "Final"+((TextView) view).getText()); 

登錄貓給我的

BadItem1 
FinalItem1 

輸出我想我會有人指出這是錯誤的方式。我也認爲我應該使用OnItemClickListener。我會嘗試並在未來發布我的結果以獲得更輕鬆的幫助。

+0

不要使用應用程序上下文,使用您剛剛從作爲上下文 – Blundell 2011-12-18 21:51:03

回答

1

的錯誤是在這裏:

final String chosen = ""; 
chosen = (String) ((TextView) view).getText(); 

既然你聲明選爲最後,你可以爲它分配一個值只有一次:

final String chosen = (String) ((TextView) view).getText(); 

而且我想你想開始具有活動存儲在所選變量中的名稱。你不能爲此寫入selected.class。正確的方法是:

Class.forName(chosen); 

希望這有助於!

+0

難道它幫助你來的活動嗎? – 2011-12-19 15:29:02

+0

因爲這個問題,我學到了很多哈哈.. – 2012-04-26 05:41:18

0

沒有Intent構造函數需要ContextString。您可以在調用Intent構造函數時做類似Class.forName(chosen)的操作。

0

做一個Factory

這樣,您不必將您的類名與用戶正在閱讀的文本關聯起來。爲您提供更多的靈活性/更好的用戶體驗/易於維護的代碼。幫助您的separation of concerns也是如此。

class NavFactory { 
    private static final int CLASS_FIRST = 1;  

    public static Intent getNavIntent(Context context, String name){ 
     switch(getId(name)){ 
       case CLASS_FIRST: 
        return new Intent(context, FirstClass.class); 
       default: 
        return null; 
     } 
    } 

    private static int getId(String name){ 
     if("listItemOneText".equals(name) 
      return CLASS_FIRST; 

     return -1; 
    } 


} 

編號:Java Factory Pattern

你的情況:

String chosen = (String) ((TextView) view).getText(); 
Intent nextScreen = NavFactory.getNavIntent(this, chosen); 
0

你是新發String像預想的那樣Activityclass。這是你所需要的:

final String chosen = ""; 
chosen = ((TextView) view).getText(); 
Class<?> chosenActivity = Class.forName(chosen); 
Intent nextScreen = new Intent(this, chosenActivity);