#android #gridview #button #adapter
#Android #просмотр сетки #кнопка #адаптер
Вопрос:
У меня есть разговорник с возможностью сохранения образца на SD. Я использую настройку Gridview со следующим кодом для адаптера кнопок:
public View getView(int position, View convertView, ViewGroup parent) {
try {
final Sample sample = board.getSamples().get(position);
if (sample != null) {
Button button = new Button(context);
button.setText(sample.getName());
button.setTextColor(Color.WHITE);
button.setTextSize(12);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
context.play(sample);
}
});
// TODO Implement this correctly.
button.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View v) {
return context.saveToSD(sample);
}
});
return button;
}
} catch (IndexOutOfBoundsException e) {
Log.e(getClass().getCanonicalName(), "No sample at position "
position);
}
return null;
}
Я хочу интегрировать контекстное меню здесь при длительном нажатии, чтобы указать, где сохранить образец. Кажется, я не могу зарегистрировать кнопку для контекстного меню в этом методе (т.Е. registerForContextMenu (кнопка), поскольку это выдает мне ошибки.
Я здесь немного в тупике, любые указатели были бы отличным подспорьем.
Спасибо
Ответ №1:
Я полагаю, что это старый пост, но я наткнулся на него сегодня, когда искал ответ на ту же тему. Как и в вопросе здесь, у меня есть сетка элементов, и я хотел показать контекстное меню при длительном нажатии.
Я не использую contextmenu, а вместо этого использую 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();
}
Надеюсь, это поможет.