Динамический слушатель кнопки Onclick - PullRequest
0 голосов
/ 08 марта 2012

Я пытаюсь создать динамические кнопки.При нажатии на кнопку она должна перейти к указанному URL-адресу, назначенному тексту кнопки.

Для тестирования сначала я попытался получить этот идентификатор, если он равен, он печатает значение i.Но всякий раз, когда я нажимаю какую-либо одну кнопку, вместо того, чтобы сказать это конкретное значение i, он входит в полный цикл и печатает все значения i, начиная с 1 до 19 (количество динамически создаваемых кнопок)

И после печати всех значений от 1 до 19 программа принудительно закрывается, говоря: Null pointer exception.

Я даже пытался поместить код обработчика вне onCreate(), но я все еще получаюта же ошибка.

for ( i = 0; i <itemList.getTitle().size()-1; i++) {
    title[i] = new TextView(this);
    title[i].setTextColor( -16711936 );
    title[i].setTextSize(18);
    title[i].setText("Title = "+itemList.getTitle().get(i));
    description[i] = new TextView(this);
    description[i].setTextColor(-16776961);
    description[i].setText("Description = "+itemList.getDescription().get(i)+"......");
    more[i]=new Button(this);
    more[i].setText(itemList.getLink().get(i));

    layout.addView(title[i]);
    System.out.println("Title view is set");
    layout.addView(description[i]);
    //System.out.println("Description view is set");
    layout.addView(more[i]);

    more[i].setOnClickListener(listener);
}

private OnClickListener listener=new OnClickListener(){
    public void onClick(View arg) {
        int index = 0;  
        for (i = 0; i < more.length; i++)  
        {  
            if (more[i].getId() == arg.getId())  
            {  
                index = i;  
                System.out.println("Value of i onclick is"+i);  
            }  
        }
        //System.out.println("Vlaue of I in onclick"+i);
        //Uri uri=Uri.parse(itemList.getLink().get(i));
        //startActivity(new Intent(Intent.ACTION_VIEW,uri));

        //Toast.makeText(getApplicationContext(), "This button is clicked"+i+more[i].getText()+itemList.getLink().get(i),Toast.LENGTH_LONG).show();
    }
}

Ответы [ 4 ]

3 голосов
/ 08 марта 2012

Вы можете использовать setTag() и getTag() метод просмотра для определения другой кнопки.

for (i = 0; i < itemList.getTitle().size()-1; i++)  {
    ...
    more[i].setTag(i);  // Use index of itemList as the tag
}

В onClick:

int index = (Integer)arg.getTag();
1 голос
/ 08 марта 2012

Вы также можете установить идентификатор кнопки

more[i].setid(i);
0 голосов
/ 08 марта 2012

Я думаю, это поможет вам ..

установить тег кнопки также динамически, как

more[i].setId(i); 

, а также изменил условие, например

 if (more[i].getId() == i) {
     index = i;
 }

надеюсь, это поможетвы ...

0 голосов
/ 08 марта 2012
int index = 0;  
for (i = 0; i < more.length; i++)  
{  
   if (more[i].getId() == arg.getId())  
   {  
       index = i;  
       System.out.println("Value of i onclick is"+i);  
   }  
}

Как вы можете видеть здесь, я все еще в вашем цикле.
Поместите System.out.println("Value of i onclick is"+i); вне вашего цикла for, и оно должно работать

PS: отформатируйте код, его легче читать, и вы легко заметите такие мелкие ошибки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...