В моем приложении есть два файла макета. Также у меня Activity extends ListActivity. Каждый элемент этого упражнения выглядит с учетом файла макета item.xml. Я пытаюсь открыть контекстное меню при длительном нажатии на элемент, но не вижу его.
В своей деятельности я пытаюсь зарегистрироватьForContextMenu (getListView ()) и переопределить два метода
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = this.getIntent().getExtras();
registerForContextMenu(getListView());
new PopulateAdapterTask().execute(ACTION_SELECT);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info;
try {
info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
} catch (ClassCastException e) {
return false;
}
long id = getListAdapter().getItemId(info.position);
Log.d(TAG, "id = " + id);
return true;
}
Main.xml
Item.xml
Все это не работает. Может причина в LinearLayout? Я также нашел похожую тему Android: Контекстное меню не отображается для ListView с элементами, определенными LinearLayout? , но у меня есть более сложный элемент списка.
Как получить контекстное меню в моем случае?
Также у меня есть внутренний класс extends ArrayAdapter. В этом классе в методе getView я могу установить OnCreateContextMenuListener для каждого просмотра после появления этого контекстного меню, но я не знаю, как обрабатывать щелчки элементов. Если я пытаюсь сделать это в методе onContextItemSelected, объект item.getMenuInfo () всегда имеет значение null, и я не могу получить от него некоторую информацию.
private class ChannelAdapter extends ArrayAdapter {
private List channels;
public ChannelAdapter(Context context, int textViewResourceId, List objects) {
super(context, textViewResourceId, objects);
this.channels = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.station_item, null);
}
v.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
});
Спасибо. Надеюсь на вашу помощь.