2017-02-09 41 views
0

我是新來的Android編程用很少的經驗中連接一個變量,我會試着問正確的問題,但如果我的一些理解ISN」的我很抱歉很難從頭開始。初級 - 語法到findViewById內字符串或TextView的分配

我建立帶有按鈕的基本計算器應用程序0到9的用戶可以使用這些輸入特定號碼的文本字段。

我有相同的一段代碼(下面)來做所有0到9按鈕的按鈕操作。只要在哪裏看到數字1,它就被該按鈕的相關數字取代。

 Button button1 = (Button) findViewById(R.id.button_calc_1); 
    button1.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      String number_1 = ("1"); 
      TextView Insert_Number_1 = (TextView) findViewById(R.id.editTextoutput); 
      TextView Insert_Number_1_view = (TextView) findViewById(R.id.CurrentDisplay); 
      Insert_Number_1.append(number_1); 
      Insert_Number_1_view.append(number_1); 

     } 
    }); 

所以我寫相同的代碼,我可以再呼籲對相關按鈕的子程序。

 public String numberbuttons(String value){ 
    Button button1 = (Button) findViewById(R.id.button_calc_1); 
    button1.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      String number_1 = ("1"); 
      TextView Insert_Number_1 = (TextView) findViewById(R.id.editTextoutput); 
      TextView Insert_Number_1_view = (TextView) findViewById(R.id.CurrentDisplay); 
      Insert_Number_1.append(number_1); 
      Insert_Number_1_view.append(number_1); 

     } 
    }); 

} 

請記住這是一項正在進行的工作。

我的問題基本上是我怎麼添加變量numberbuttons到button_calc_(此處插入numberbuttons)

編輯:

好了,所以從第二個代碼塊。我想在findViewById(R.id.button_calc_1)中使用numberbuttons變量。

所以在我的腦海中,我想像這樣。

findViewById(R.id.button_calc_+(numberbuttons); 

當我調用textview時也是如此。我像這樣描繪。

TextView Insert_Number_+(numberbuttons) = (TextView) findViewById(R.id.editTextoutput); 
+0

你應該更具體要實現什麼。試着舉一些例子。 –

+0

好吧,我會更新我一直在試圖做的事情。感謝您的建議。 – TwizzleBizzle

+0

爲什麼不使用數組? –

回答

1

的findViewById()方法需要一個整數,而不是字符串,所以你不能僅僅通過與您要使用按鈕的名稱的字符串。當你使用R.id.xxx時,你傳遞的是對資源的引用,實際上這只是一個int。

來完成你想要什麼我建議使用某種類型的列表存儲按鈕,然後通過這個循環。請看下面的例子。

ArrayList<Button> buttons = new ArrayList<>(); 

buttons.add((Button) findViewById(R.id.button1)); //Do this for all the buttons. 

for(Button b : buttons){ 
    b.setText("1"); //Do whatever you need to each button in here. 
} 

如果你想用一種方法來管理所有的按鈕,你也可以這樣做!

changeButton((Button) findViewById(R.id.button1)); 

private void changeButton(Button b){ 
    //Change the button 
} 

編輯:

爲了更貼近你的問題,如果我理解正確的話,將事件處理程序添加到每個。

ArrayList<Button> buttons = new ArrayList<>(); 

buttons.add((Button) findViewById(R.id.button1)); //Do this for all the buttons. 

for(int i = 0; i < buttons.size(); i++){ 
    Button b = buttons.get(i); 
    button1.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     String number = String.valueOf(i); 
     TextView Insert_Number_1 = (TextView) findViewById(R.id.editTextoutput); 
     TextView Insert_Number_1_view = (TextView) findViewById(R.id.CurrentDisplay); 
     Insert_Number_1.append(number_1); 
     Insert_Number_1_view.append(number_1); 

    } 
}); 
} 
+0

好的,謝謝你的回答。就像我的頭部工作一樣!我不明白爲什麼對資源的引用不能在裏面也有一個變量。 我不確定最底層的代碼是否會在findViewById中找到正確的視圖,每個按鈕都是button1,button2,button3 ... – TwizzleBizzle

+0

@TwizzleBizzle是的,除非您在Java代碼中創建佈局,否則您將始終必須引用XML中的每個ID。就像最後一種方法一樣,它可以讓你編寫一次事件處理程序代碼而不是9次。 –