使用onClickListeners迭代多个textviews

时间:2014-02-19 00:51:06

标签: java android textview onclicklistener

我正在为词汇游戏设置textView键盘。我希望清理我的代码,并想知道我是否可以迭代所有26个字母。截至目前,我宣布他们全部 单独如代码所示。

我想使用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

2 个答案:

答案 0 :(得分: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);
        }
    });
}

答案 1 :(得分:0)

更好地制作文本视图是在循环中创建自己的文本视图并将其存储在具有单个ID的散列映射中,这样您就可以解决每个问题。但是如果你想得到所有这些,你可以从父母做到这一点,你可以这样做:

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);
     }
}