2014-10-06 3 views
0

У меня есть эта рабочая часть кода для выбора номера из GridView, который находится внутри в AlertDialog:Закрыть AlertDialog, когда пользователь выбирает опцию

public void iconSelect (View v){ 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    GridView gridview = new GridView(this); 

    List<Integer> mList = new ArrayList<Integer>(); 
    for (int i = 1; i < 10; i++) { 
     mList.add(i); 
    } 
    ArrayAdapter<Integer> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mList); 
    gridview.setAdapter(adapter); 
    gridview.setNumColumns(3); 
    gridview.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Toast.makeText(getApplicationContext(), "Chosen: " + position, Toast.LENGTH_SHORT).show(); 

     } 
    }); 

    builder.setView(gridview); 
    builder.setTitle("Icon selector"); 
    builder.show(); 
} 

Моя цель состоит в том, что когда пользователь выбирает номер из GridView затем диалог закрывается. Прямо сейчас он позволяет пользователю нажимать номер в gridview и показывать тост много раз, когда пользователь хочет, пока он не нажмет кнопку «Назад».

Что мне делать? Я ищу метод, похожий на builder.close() или builder.dismiss(), который должен выполняться внутри слушателя. (Создание строителя конечного переменный)

ответ

3

Вы должны использовать builder.show() или builder.create() держать экземпляр AlertDialog для того, чтобы закрыть его после этого

Попробуйте следующий код:

public void iconSelect (View v){ 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    GridView gridview = new GridView(this); 

    List<Integer> mList = new ArrayList<Integer>(); 
    for (int i = 1; i < 10; i++) { 
     mList.add(i); 
    } 
    ArrayAdapter<Integer> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mList); 
    gridview.setAdapter(adapter); 
    gridview.setNumColumns(3); 

    builder.setView(gridview); 
    builder.setTitle("Icon selector"); 
    final AlertDialog dialog = builder.show(); 
    gridview.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Toast.makeText(getApplicationContext(), "Chosen: " + position, Toast.LENGTH_SHORT).show(); 
      dialog.dismiss(); 
     } 
    }); 
} 
+0

Nice! Это сработало отлично! Спасибо, Абдалла. Я обращу внимание на это. Я не знал, что делаю _voiding_ в 'builder.show()' –

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