У меня есть ViewPager
который использует ListFragments
на каждой странице. Я реализую onListItemClick
и onContextItemSelected
для обработки щелчка элемента списка и длинных часов соответственно. Данные ListFragment
загружаются через AsyncTask
из Интернета.
Желаемое поведение - короткое нажатие на элемент списка, чтобы начать подробное действие, чтобы показать детали для этого местоположения (это приложение для погоды). Когда пользователь долго нажимает, появляется контекстное меню, чтобы предоставить пользователю другие параметры, в том числе для просмотра необработанных данных.
Операция короткого нажатия и детализации работает нормально. проблема заключается в длинном нажатии, контекстном меню. Когда пользователь находится на стр. 3 и выбирает второй элемент в списке с помощью длительного нажатия, а затем выбирает "показывать необработанные данные" для этого местоположения, отображаются необработанные данные для второго элемента на стр. 2, а не стр. 3.
Сейчас я использую setOffscreenPageLimit (1). когда я меняю это на setOffscreenPageLimit (2), вместо страницы 3 отображаются данные со страницы 1.
Код:
@Override
public boolean onContextItemSelected(android.view.MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case R.id.cmenu_showRaw:
ViewGroup dataPanel = (ViewGroup) myListView.getChildAt(info.position);
TextView tvRaw = (TextView) dataPanel.findViewById(R.id.textRaw);
TextView tvLocationID = (TextView) dataPanel.findViewById(R.id.textLocationId);
showDismissDialog(tvRaw.getText().toString(), tvLocationID .getText().toString());
return true;
Я пытаюсь понять, почему данные raw и locationID не извлекаются из фрагмента, который в настоящее время отображается на ViewPager, но со страницы смещения. Я все еще изучаю Фрагменты, поэтому, вероятно, я пропустил что-то тонкое.
Я понял это: info.targetView
дает мне представление о том, что я нажал. Оттуда я могу сделать findViewById
чтобы получить то, что мне нужно.