2012-05-24 1 views
1

У меня есть ViewPager, который использует ListFragments на каждой странице. Я реализую onListItemClick и onContextItemSelected для обработки щелчков и длинных часов элемента списка соответственно. Данные ListFragment загружаются через AsyncTask из Интернета.Android ListFragment в ViewPager с помощью контекстного меню

Желаемое поведение - короткое нажатие на элемент списка, чтобы начать подробное действие, чтобы показать детали для этого местоположения (это приложение для погоды). Когда пользователь долго нажимает, появляется контекстное меню, чтобы предоставить пользователю другие параметры, в том числе для просмотра необработанных данных.

Работа с коротким прессом и деталями работает нормально. проблема заключается в длинном нажатии, контекстном меню. Когда пользователь находится на странице 3 и выбирает второй элемент в списке, используя длительное нажатие, а затем выбирает «показать исходные данные» для этого местоположения, отображаются необработанные данные для второго элемента на стр. 2, а не стр. 3.

Прямо сейчас я использую setOffscreenPageLimit (1). когда я изменить что setOffscreenPageLimit (2), данные страницы 1 отображается вместо страницы 3.

Код:

@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; 

Я пытаюсь выяснить, почему сырье и locationID данные не являются извлекается из фрагмента, который в настоящее время отображается на ViewPager, но со страницы смещения. Я все еще изучаю Фрагменты, поэтому, вероятно, я пропустил что-то тонкое.

ответ

2

Я понял: info.targetView получает меня мнение, что я надавил. Оттуда я могу сделать findViewById, чтобы получить то, что мне нужно.