2012-11-16 65 views
1

我試圖通過使用for循環來初始化我想要的屏幕上的所有精靈節省時間。我的可繪製文件夾上有幾張圖片。所以我相應地重新命名了它們。我想連接i到表達式,然後必須以某種方式調用/調用它! 起初,我想過這樣做:如何使一個字符串'invokable'然後將其轉換爲整數(Android)

Integer.parseInt("R.drawable.scoredisplay" + i) 

然後,當然你不能解析到一個整數,也是表達式的結果反正返回一個整數。如何將表達式與i並置,然後調用它?可能嗎?

回答

1

這是可能的,你需要做到以下幾點:

Context x = getApplicationContext(); 
int myId = x.getResources().getIdentifier("R.drawable.scoredisplay" + i, "drawable",x.getPackageName()); 

當第一個參數是ID爲的View你想要得到的,第二個是資源在這種情況下,鍵入「String drawable「,第三個是我們從上下文中獲得的包名稱,調用getPackageName()方法。 然後之後你可以用下面的代碼視圖:

View myView = findViewById(myId); 

字符串轉換成一整數,你在想是沒有意義的,因爲ID不是字符串(儘管它有一個解決辦法像我向你展示)。

更新

由於您使用的是Activity類以外的代碼到Context方法的調用是無效的。您需要創建一種從活動外部訪問活動上下文的方式(您提到從您的類中調用.getContext(),但這將獲得該類上下文,而不是活動)。實現這一目標將修改你的構造函數的方式,可以說你有一個名爲myClass類:

class myClass{ 
    //Declase a Context variable inside your class 
    Context x; 

    //You implement a constructor for this class that accepts a Context as 
    //a parameter (feel free to add more if you are using a constructor already) 
    public myClass(Context applicationContext){ 
     //Assign the passed value to your local Context 
     x = applicationContext; 
    } 

    //Afterwards, on a different part of your class, you could invoke activity 
    //related methods by using the Context you have 'x' 
    public void otherMethod(){ 
     int myId = x.getResources().getIdentifier("R.drawable.scoredisplay" + i, "drawable",x.getPackageName()); 
    } 
} 

確保您從Activity正確地傳遞你的價值,你應該會看到類似這樣的地方的東西最後一部分在你的代碼:

myClass i = new myClass(); 

因爲我們現在有一個構造函數,或者已經修改了現有的一個,您可以添加到this活動場景傳遞到您的權利遊戲或任何類的創建:

myClass i = new myClass(this);//'this' can be 'getApplicationContext()' 
相關問題