2014-02-19 89 views
-1

我爲詞彙遊戲設置了一個textView鍵盤。我正在尋找清理我的代碼,並想知道我是否可以迭代所有26個字母。截至目前,我如代碼中所示單獨聲明它們全部爲 。用onClickListeners迭代多個textviews

我想使用for循環,並試驗過沒有運氣。

private void setupKeyBoard() { 
    A = (TextView) getView().findViewById(R.id.A); 
    A.setTextSize(20 * getResources().getDisplayMetrics().density); 
    A.setText("A"); 
    A.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      checkGuess('A'); 
      A.setClickable(false); 
      A.setAlpha((float) .1); 
     } 
    }); 

    B = (TextView) getView().findViewById(R.id.B); 
    B.setTextSize(20 * getResources().getDisplayMetrics().density); 
    B.setText("B"); 
    B.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      checkGuess('B'); 
      B.setClickable(false); 
      B.setAlpha((float) .1); 
     } 
    }); 

    C = (TextView) getView().findViewById(R.id.C); 
    C.setTextSize(20 * getResources().getDisplayMetrics().density); 
    C.setText("C"); 
    C.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      checkGuess('C'); 
      C.setClickable(false); 
      C.setAlpha((float) .1); 
     } 
    }); 
} //stop at Z 
+0

你是否有26個TextView在你的佈局? –

回答

0

我會推薦這個方法:

for(char letter = 'A'; letter <= 'Z';letter ++){ 
int letterID = getResources().getIdentifier(""+letter, "id", getPackageName()); 
TextView txtview = (TextView) getView().findViewById(letterID); 
    txtview .setTextSize(20 * getResources().getDisplayMetrics().density); 
    txtview .setText(letter); 
    txtview .setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      checkGuess(letter); 
      txtview.setClickable(false); 
      txtview.setAlpha((float) .1); 
     } 
    }); 
} 
+0

這就是我所看到的,我嘗試了類似的東西。在嘗試你的代碼時,我得到這些錯誤。 「無法解析方法'getPackageName()」和「變量'txtview'是從內部類中訪問的,需要聲明爲final」andVariable'字母'是從內部類中訪問的。需要被宣佈爲最終。 –

+0

txtview需要是最終的。如果使用片段,請添加getActivity()。getPackageName() – OWZY

0

更好的使textviews是在一個循環中創建自己的textviews並與一個單一的ID存儲在一個HashMap這樣你就可以得到每一個沒有問題。但如果你想獲得所有人,也許你可以從父母做到這一點,你可以這樣做:

String[] lettersMap = {"A", "B", "C",....,"Z"}; 

HashMap<String, TextView> map = new HashMap<String, TextView>(); 

// ll is your linear layout or your relative (i.e. your parent of all the textviews) 
int childcount = ll.getChildCount(); 

for (int i=0, letMap = 0; i < childcount; i++){ 
     View v = ll.getChildAt(i); 

    if (v instanceof TextView) { 
      TextView tv = (TextView) v; 
      tv.setTextSize(20 * getResources().getDisplayMetrics().density); 
      tv.setText(lettersMap[letMap]); 
      tv.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      checkGuess(lettersMap[letMap]); 
      tv.setClickable(false); 
      tv.setAlpha((float) .1); 
     } 
    }); 

map.put(lettersMap[letMpa], tv); 
    } 
}