2014-06-18 4 views
1

좋아, 그럼 탐색 서랍이있는 앱이 있습니다. 서랍의 모든 메뉴 항목은 사용자에게 표시되는 다른 조각을 열어 잘 작동합니다.Android 조각 데이터 손실

이러한 조각 중 하나 (DashboardClientFragment)는 onCreateView() 메서드에서 webservice를 호출 한 다음 ViewPager를 채 웁니다. 처음 실행하면 데이터가로드되고 잘 표시됩니다.

서랍을 열고이 조각을 다시 여는 동일한 항목을 클릭하면 문제가 시작됩니다. 프래그먼트가로드되고 webservice에 대한 호출이 다시 호출됩니다 (서비스에서 json 응답을 표시 함). 그러나 뷰 페이지가 비어 있습니다.

다음은 문제의 스크린 샷입니다 :

screen one - everything fine

screen two - opening the navigation drawer and clicking on the dashboard menu item

다음

screen three - the bug

이 활동의 ​​버전을 박탈입니다.

public class DashboardActivity extends FragmentActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_dashboard); 

    if (savedInstanceState == null) { 
     displayView(1, false); 
    } 
} 

public void displayView(int id, boolean addBackStack) { 
    Fragment fragment = null; 

    switch (id) { 
    case 1: 
     fragment = new DashboardClientFragment(); 
     break; 
    case 2: 
     fragment = new ClientsFragment(); 
     break; 
    case 5: 
     fragment = new StorefrontPreviewFragment(); 
     break; 
    case 6: 
     new SessionManager(this).logoutUser(); 
     startActivity(new Intent(this, MainActivity.class)); 
     finish(); 
     break; 

    default: 
     break; 
    } 

    if (fragment != null) { 
     drawer.closeDrawers(); 

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     if (addBackStack) 
      fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).addToBackStack(null).commit(); 
     else 
      fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit(); 
    } 
} 


} 

그리고 이것은 내 조각입니다 (전체 코드)

public class DashboardClientFragment extends Fragment implements OnClickListener { 

private ViewPager pager; 
private TextView add_booking; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment_dashboard_client, container, false); 

    ((DashboardActivity) getActivity()).setSelectedMenu(1); 
    ((DashboardActivity) getActivity()).setBarTitle("Dashboard"); 

    pager = (ViewPager) v.findViewById(R.id.pager); 
    add_booking = (TextView) v.findViewById(R.id.add_booking); 

    add_booking.setOnClickListener(this); 

    final Map<String, String> params = new HashMap<String, String>(); 
    params.put("auth", DashboardActivity.user.get(SessionManager.AUTH)); 

    Log.d("params", params.toString()); 

    StringRequest dash = new StringRequest(
      Method.POST, 
      G.DOMAIN + "index/rest/dashboard", 
      new Listener<String>() { 

       @Override 
       public void onResponse(String json) { 

        Log.d("json", json); 

        DashboardPagerAdapter pagerAdapter = new DashboardPagerAdapter(getActivity().getSupportFragmentManager(), json); 
        pager.setAdapter(pagerAdapter); 
       } 
      }, 
      new ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        VolleyLog.d("error", "Error: " + error.getMessage()); 
       } 
      }) { 
     @Override 
     protected Map<String, String> getParams() { 
      return params; 
     } 
    }; 

    AppController.getInstance().addToRequestQueue(dash, null); 

    return v; 
} 

@Override 
public void onClick(View v) { 
    if (v == add_booking) { 
     startActivity(new Intent(getActivity(), BookingActivity.class)); 
    } 
} 

} 

답변

2

당신은 대체 getChildFragmentManager()

을 사용해야합니다

DashboardPagerAdapter pagerAdapter = new DashboardPagerAdapter(getActivity().getSupportFragmentManager(), 
json); 
pager.setAdapter(pagerAdapter); 

로 :

DashboardPagerAdapter pagerAdapter = new DashboardPagerAdapter(getChildFragmentManager, 
json); 
pager.setAdapter(pagerAdapter); 

작동하게하면 지금);

+0

그것은 말문이있다. 정말 고맙습니다. –

+0

반갑습니다. –