2012-01-18 4 views
0

Может ли кто-нибудь посоветовать мне, как установитьOnClickListener для TextViews, которые генерируются динамически. У меня есть несколько кнопок в моем приложении. Теперь, когда нажата конкретная кнопка, чем некоторые конкретные текстовые элементы извлекаются из базы данных на основе количества элементов, возвращаемых соответствующими TextView, генерируются для отображения извлеченных текстовых элементов. Теперь проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как установить onClickListner для динамически созданного TextViews.Flowing - это часть кода, в которой я создаю свой TextViews.Please, расскажите мне, что я должен делать. вы:Как установить onClickListener для текстовых просмотров, генерируемых динамически?

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

ответ

0

У вас уже есть onClick() метода в классе активности (реализованный View.setOnClickListener), поэтому я предлагаю вам создать новый класс, который реализует интерфейс View.setOnClickListener обрабатывать щелчок TextView.

Try,

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); 
    ... 
} 
+0

Благодарю вас за ответ. Хорошо попробуй это и посмотри, работает ли оно. – Viking

+0

он работал благодаря AVD для ценного ввода. – Viking

0

Например,. у вас есть список телевизоров для хранения ваших объектов TextView, созданных результатом db. То, что вы должны сделать, это так:

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

спасибо за reply.your ответ не полный, но в любом случае я получил то, что вы пытаетесь say.Im не уверен, нужен ли я использовать цикл или нет, и если я должен тогда, когда оно может соответствовать в коде. Я уже пробовал использовать для цикла один раз, но не получил успеха. Также я просто добавляю свои текстовые элементы в LinearLayout без использования ListView. – Viking

0

Это та же установка на клик слушателей, независимо от того, если вид был динамически.

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

благодарю вас за ответ. Но как он будет знать, на кого нажимает TextView? я попытался сделать следующее уже insed для цикла, что у меня есть: MainText [я] .setOnClickListener (новый View.OnClickListener() { общественного недействительный OnClick (View v) { DoSomething();} }); , но это повлияло на все текстовые изображения, а не на конкретный, который щелкнут – Viking

Смежные вопросы