У меня 200 просмотров текста, и я хочу знать, какая из них была нажата, как изменить текст

У меня есть проблема... я думал об этом какое-то время и искал онлайн, но до сих пор не нашел четкого объяснения...

У меня есть несколько текстовых представлений, и я установил onClickListeners для каждого из них... и когда пользователь нажимает на одно из них, я хочу, чтобы у него была возможность изменить текст на другой набор параметров строкового массива, который я создал программно. Когда пользователь выбирает опцию, текст должен измениться на опцию, которую он выбирает. (Т.е. TextView был A, теперь это B. надеюсь, что это имеет смысл... в любом случае...)

Текущее решение состояло в том, чтобы установить OnClickListener для каждого TextView, и когда кто-то нажимал его, показывался отдельный диалог. Но я обнаружил, что если я сделаю это, код будет настолько длинным, что потребуется немало времени, чтобы кодировать, поэтому я надеюсь, что у кого-то есть более элегантный способ кодирования такого длинного процесса =(

Поэтому я предполагаю, что мой вопрос будет... 1) есть ли способ узнать, какое текстовое представление было нажато, а затем изменить текст этого TextView, который нажимается в одном методе? чтобы избавить меня от необходимости кодировать 1000 диалоговых окон предупреждений...

5 ответов

Решение

Я бы предложил сохранить текстовые представления в массиве, например так:

TextView[] textViewArray = new TextView[textViewCount];

Затем с помощью цикла for присвойте каждому тег целого числа - это позиция

textViewArray.setTag(i)

И добавьте onClickListener для каждого, снова используя цикл for:

textviewArray[i].setOnClickListener(etc...)

Затем, когда один из них щелкают, вы можете использовать получить позицию просмотра, который был нажат. Для этого потребуется собственный метод внутри вашего:

textviewArray.setOnClickListener(new customOnClickListener())

Где ваш customOnClickListner выглядит так:

    private class customOnClickListener implements CompoundButton.{
    public void OnClick(View view){
        int position = (Integer) view.getTag()
        ///Do more code here - your processing
    }
}

Надеюсь, что это имеет смысл:) Для ваших циклов for, вы можете использовать для (я = 0, я

Один из способов сделать то, что вы хотите, это использовать текстовое представление setTag() а также getTag() методы.

На init текстового представления использовать setTag() установить какое-то значение для идентификации вида.

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

Я бы посоветовал вам использовать вид сетки. Вы можете увидеть, какое текстовое представление было нажато так:

gridView.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> parent, View v, int position,
      long id) {

 //get id
      switch (v.getId()) {
          case R.id.textView1: ...
  }
});

Вы должны установить "onClickListner" для всех ваших текстовых представлений. Для сохранения некоторой длины кода я бы предложил вам создать функцию вашего диалогового окна и дать ей некоторый параметр int, который будет вызываться напрямую clickListener textview, Like,

    int i=0;
    ......


 textView1 = (TextView)findViewById(R.id.yourtextview1);
 textView2 = (TextView)findViewById(R.id.yourtextview2);
  ......
  ......
 // and so on, for your all textviews

   @Override
   public void onClick(View view) {

    if (view.equals(textView1)) {
         i = 1;
       CustomDialog(i);
     }
     //Similarly for all your textViews..
     .......... 

Сделать функцию CustomDialog Like

  public void CustomDialog(int i){
   if(i==1){
    //Do something
   }   
  }

Используйте набор идентификатора для всего текста, где задайте положительное целое число идентификатора (отличное), а затем один прослушиватель щелчков при просмотре (установите все), где вы перехватываете все щелчки текстового представления (пониженное представление с текстовым представлением), и в стороне он помещает переключатель случай, когда вы обрабатываете клики, по которым нажимается текстовое представление.

Другие вопросы по тегам