2013-11-21 5 views
2

У меня есть настраиваемый диалог с gridview в нем. Диалоговое окно появляется, когда я нажимаю текстовое окно (работает). В диалоговом окне есть сетка. Моя цель состоит в том, чтобы изменить значение пробегов TextView на выборе значения из GridView и увольняет диалогAndroid: Не удается отменить собственный диалог

protected Dialog onCreateDialog(int id) { 
    Dialog dialog = null; 
    switch (id) { 
    case CATEGORY_ID: 

     AlertDialog.Builder builder; 
     AlertDialog alertDialog; 
     // Context mContext = this; 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(LAYOUT_INFLATER_SERVICE); 
     View layout = inflater.inflate(R.layout.gridview_cell, 
       (ViewGroup) findViewById(R.id.layout_root)); 

     GridView gridview = (GridView) layout.findViewById(R.id.gridView1); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       R.layout.text_gridview, R.id.run_cell, numbers); 

     gridview.setAdapter(adapter); 

     builder = new AlertDialog.Builder(context); 
     builder.setView(layout); 
     dialog = builder.create(); 
     gridview.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, 
        int position, long id) { 

       runs.setText(String.valueOf(position)); 
     **dialog.cancel() or dialog.dismiss are giving me this error: 'Cannot refer to a non-final variable result inside an inner class defined in a different method'** 
      } 
     }); 
     break; 

    } 
    return dialog; 
} 

ответ

2

Вместо

Dialog dialog = null; 

ли

final Dialog dialog; 

Для лучшего объяснения этого , проверьте this previously asked question.

Редактировать

я не видел остальную часть проблемы. Видя, как у вас есть switch заявление, вы можете просто использовать default, чтобы установить значение следующим образом:

 
protected Dialog onCreateDialog(int id) { 
    final Dialog dialog; 
    switch (id) { 
     case CATEGORY_ID: 
      //your code 
      break; 
     default: 
      dialog = null; 
      break; 
    } 
    return dialog; 
} 
+0

после Предлагаемое изменение я получаю эту ошибку ** «Диалог локальная переменная не может быть инициализирована» ** на line ** return **, –

+0

@Android_Surfer Это редактирование должно исправить это для вас. –

+1

большое спасибо. Он работает сейчас. С наилучшими пожеланиями. –

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