2012-05-24 1 views
1

각 페이지마다 ListFragments을 사용하는 ViewPager이 있습니다. 나는 각각 목록 항목 클릭과 긴 시계를 처리하기 위해 onListItemClickonContextItemSelected을 구현한다. ListFragment 데이터는 인터넷에서 AsyncTask을 통해로드됩니다.컨텍스트 메뉴를 사용하는 ViewPager 안드로이드 ListFragment

원하는 동작은 목록보기 항목을 짧게 눌러 세부 활동을 시작하여 해당 위치의 세부 정보 (날씨 앱)를 표시하는 것입니다. 사용자가 길게 누르면 상황에 맞는 메뉴가 나타나서 원시 데이터를 비롯하여 다른 옵션을 사용자에게 제공합니다.

짧은 누르기 및 세부 활동이 올바르게 작동합니다. 문제는 길게 누르면 컨텍스트 메뉴입니다. 사용자가 3 페이지에 있고 긴 누름을 사용하여 목록에서 두 번째 항목을 선택한 다음 해당 위치에 대해 "원시 데이터 표시"를 선택하면 페이지 3이 아닌 2 페이지의 두 번째 항목에 대한 원시 데이터가 표시됩니다.

지금은 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는 나에게 내가 longpressed하는 전망을 준다. 거기에서 나는 내가 필요로하는 것을 얻기 위해 findViewById를 할 수있다.