2015-05-31 5 views
1

У меня есть список, и я хочу установить его OnItemLongClickListener, чтобы показать TimePickerDialog.доступ к переменной внутри внутреннего класса

Проблема в том, что Picker не может получить какое-либо значение из вызывающего его элемента.

lst_meetings.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> adapterView, View view, int pos, long l) { 

      TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() { 
       @Override 
       public void onTimeSet(TimePicker timePicker, int i, int i1) { 
        if (timePicker.isShown())finishMeeting(Integer.parseInt(((TextView) view.findViewById(R.id.txt_No)).getText().toString()),String.format("%02d", i) + ":" + String.format("%02d", i1) + ":00"); 
       } 
      },0,0,false); 
      timePickerDialog.setTitle("Finish Time"); 
      timePickerDialog.show(); 
      return true; 
     } 
    }); 

Setting view as final is not allowed.

Как пройти View анонимного класса.

+0

Я считаю, что это уже проходит по мнению пункта, который кликнули, есть другой вид вы хотите получить доступ? (edit: shoot Я не выглядел достаточно близко, Abkarino получил вашу спину) – ultifinitus

+0

Код выше содержит ошибку компилятора в (TextView) view.findViewById (R.id.txt_No) – Abkarino

+0

@ultifinitus Я должен сделать окончательный вид используйте его в обработчике onTimeSet. Но это нарушает код. – Abkarino

ответ

0

Вы можете использовать временный final View, который будет виден в методе onTimeSet().

Кроме того, убедитесь, что у вас есть действительный контекст для TimePickerDialog, поэтому используйте MainActivity.this вместо this (Заменить MainActivity с вашим именем активность).

Попробуйте это:

 lst_meetings.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      @Override 
      public boolean onItemLongClick(AdapterView<?> adapterView, View view, int pos, long l) { 

       final View tempView = view; //added 

       TimePickerDialog timePickerDialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() { 
        @Override 
        public void onTimeSet(TimePicker timePicker, int i, int i1) { 
         // use tempView here: 
         if (timePicker.isShown())finishMeeting(Integer.parseInt(((TextView) tempView.findViewById(R.id.txt_No)).getText().toString()),String.format("%02d", i) + ":" + String.format("%02d", i1) + ":00"); 
        } 
       },0,0,false); 
       timePickerDialog.setTitle("Finish Time"); 
       timePickerDialog.show(); 
       return true; 
      } 
     }); 
+2

Просто взглянув на код - 'this' должен ссылаться на контекст. –

+0

Я пробовал это решение, и даже пытался создать переменную в начале действия, и все же он разбивает код, как на картинке. – Abkarino

+0

@Abkarino Ahh, ОК. Очень странно. –

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