如何为动态生成的textviews设置onClickListener?

时间:2012-01-18 03:43:25

标签: java android textview

任何人都可以指导我如何为动态生成的TextViews设置setOnClickListener。 我的应用程序中有几个按钮。现在,当单击某个特定按钮时,根据返回的元素数量从数据库中检索某些特定文本元素,生成相应的TextView以显示检索到的文本元素。 现在我遇到的问题是我不知道如何为动态生成的TextView设置onClickListner。以下是我正在创建TextView的代码片段。请指导我应该怎么做。谢谢你

public void onClick(View v) {
    switch (v.getId()) {
    case R.id.imageButton1:
catagory = "General";
            IndependentDB genData = IndependentDB.getInstance();
            genData.open(this);
            ArrayList<TextHolder> genList = new ArrayList<TextHolder>();
            genList = genData.getAllTextFromGenT();
            genData.close();
            x = genList.size();
            String xstr = new StringBuilder().append(x).toString();
            System.out.println(xstr);
            mainText = new TextView[x];
            textLayout = new LinearLayout[x];
            llseperator = new LinearLayout[x];
            textLayoutContainer
                    .setBackgroundResource(R.color.dark_navy_blue);
            if (!genList.isEmpty()) {
                for (int i = 0; i < x; i++) {
                    TextHolder firstOne = genList.get(i);
                    String text = firstOne.getText();
                    mainText[i] = new TextView(this);
                    mainText[i].setId(i);
                    mainText[i].setText("Text");
                    mainText[i].setLayoutParams(new LayoutParams(
                            LayoutParams.WRAP_CONTENT,
                            LayoutParams.WRAP_CONTENT));
                    mainText[i].setTextSize(25);
                    mainText[i].setGravity(Gravity.CENTER);
                    mainText[i].setText(text);
                    mainText[i].setTextColor(0xFFFFFFFF);
                    mainText[i].setClickable(true);
                    mainText[i].setOnClickListener(this);
                    llseperator[i] = new LinearLayout(this);
                    llseperator[i].setId(i);
                    llseperator[i].setLayoutParams(new LayoutParams(
                            LayoutParams.FILL_PARENT,
                            LayoutParams.WRAP_CONTENT));
                    llseperator[i].setGravity(Gravity.CENTER);
                    llseperator[i]
                            .setBackgroundResource(R.drawable.tv_seperator);

                    textLayout[i] = new LinearLayout(this);
                    textLayout[i].setId(i);
                    textLayout[i].setLayoutParams(new LayoutParams(
                            LayoutParams.FILL_PARENT,
                            LayoutParams.WRAP_CONTENT));
                    textLayout[i].setGravity(Gravity.CENTER);
                    textLayout[i].addView(mainText[i]);
                    textLayoutContainer.addView(textLayout[i]);
                    textLayoutContainer.addView(llseperator[i]);
                }// End of for
                }// End of If
        break;}

3 个答案:

答案 0 :(得分:0)

例如。你有一个List tvs来存储db结果创建的TextView对象。你应该做的是这样的:

for(int i =0;i<tvs.count;i++){
tvs.get(i).setOnClickListener(new OnClickListener(){
...
})
}

答案 1 :(得分:0)

你已经在Activity类中使用了onClick()方法(实现了View.setOnClickListener),所以我建议你创建一个实现View.setOnClickListener接口的新类来处理TextView的点击。

尝试,

class TextClick implements View.setOnClickListener {
  @Override
  public void onClick(View view) {
     TextView tx=(TextView) view;
     ...
   }
}

并设置点击监听器,

 TextClick click=new TextClick();
 for (int i = 0; i < x; i++) {
    TextHolder firstOne = genList.get(i);
    String text = firstOne.getText();
    mainText[i] = new TextView(this);      
    mainText[i].setOnClickListener(click);
    ...
 }

答案 2 :(得分:0)

无论视图是否是动态生成的,点击侦听器的设置都是相同的。

    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            dosomething();
        }
    });