2011-12-21 2 views
2

Я хочу использовать контекстное меню, когда пользователь нажимает кнопку «Просмотр внутри адаптера». Проблема в том, что OnClick для каждого представления находится внутри класса, который не является активностью [это класс, который расширяет BaseAdapter], внутри public View getView (конечная позиция int, View convertView, родительская группа ViewGroup).Android registerForContextMenu из-за активности

Итак, когда я пытаюсь создать контекстное меню или зарегистрироваться в registerForContextMenu внутри этого класса, который расширяет BaseAdapter, это невозможно.

Итак, вопрос в том, что onclick находится внутри класса Not Activity. Можно ли дать этому классу параметры, которые позволяют ему запускать контекстное меню?

+0

Проблема решена: Внутри класса, который не является активным, я использую AlertDialog. Чтобы использовать его, я указываю в качестве параметра контекст активности, использующей этот класс. Таким образом, можно показать список вариантов для пользователя в этом классе, который не является активностью. Для этого необходимо использовать: Looper.подготовить(); \t \t \t \t \t \t ab.show(); \t \t \t \t \t \t Looper.loop(); , чтобы создать обработчик для класса, который не является активным. – Cavina

ответ

2

Я хочу использовать контекстное меню, когда пользователь нажимает на View внутри адаптера ,

Надеюсь, нет. Вы можете использовать контекстное меню, когда пользователь нажимает на элемент в AdapterView. Here is a sample project демонстрируя это.

Любое другое (например, выскакивающее что-либо ", когда пользователь нажимает на Просмотр внутри адаптера"), должен быть AlertDialog, как предложено @ coder_For_Life22.

Итак, когда я пытаюсь создать контекстное меню или зарегистрироваться в registerForContextMenu внутри этого класса, который расширяет BaseAdapter, это невозможно.

registerForContextMenu() один раз, для AdapterView. Вы делаете это с onCreate(), после того как вы позвонили setContentView() и поэтому создали AdapterView.

Все остальное должно быть AlertDialog.

Можно ли предоставить этому классу параметры, которые позволяют ему запускать контекстное меню?

Вам не нужно «дать этот класс параметров, что позволяет ему начать контекстное меню», потому что вы только звоните registerForContextMenu() один раз, для AdapterView.

Все остальное должно быть AlertDialog. Вы можете добавить конструктор на свой Adapter, который принимает Activity в качестве параметра, который ваш Adapter удерживает и использует для AlertDialog. Или, если Adapter является внутренним классом Activity, просто используйте MyActivityName.this для ссылки на Activity.

+0

На самом деле, у меня есть GridView с ButtonAdapter. Я делаю: адаптер = новый ButtonAdapter (this.getApplicationContext, 50, 50); , а затем в классе, который расширяет BaseAdapter, я включаю образы и устанавливаю onclick для каждого ... и мне бы хотелось, чтобы этот щелчок открыл контекстное меню [или AlertDialog], позволяющее выполнять определенные операции с этим конкретным изображением ... – Cavina

+0

@CommonsWare, спасибо за пример на GitHub. – hotshot309

2

Вы можете использовать AlertDialog для этого ..

Это будет выглядеть примерно так ..

gridview.setOnItemLongClickListener(new OnItemLongClickListener() { 
    public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) 
    { 
     showOptionsMenu(position); 
     return true; 
    } 

}); 

public void showOptionsMenu(int position) 
{ 
new AlertDialog.Builder(this) 
.setTitle("test").setCancelable(true).setItems(R.array.myOptions, 
      new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialoginterface, int i) { 
        //take actions here according to what the user has selected 
       } 
     } 
) 
.show(); 
} 
+0

Я нахожусь в Faces.class, у которого есть сетка, построенная с помощью BaseAdapter. Когда я нажимаю изображение в сетке, он выглядит onclicklistener внутри класса, который расширяет BaseAdapter и СЛЕДУЕТ, в Faces.class, откройте меню ... поэтому я не могу просто начать новую деятельность ... – Cavina

+0

Проверить мое редактирование , я изменил свой ответ. –

+0

Но диалоговое окно предупреждения должно находиться внутри права действия? Нет другого способа дать класс BaseAdapter [кто имеет прослушиватель кликов для каждого ImageButton] View или что-то, что позволяет ему отображать в качестве диалогового интерфейса? – Cavina

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