2014-11-21 2 views
0

FragmentsFragmentPagerAdapter을 사용하여 스 와이프하여 tabview를 만들었습니다. 프래그먼트의 호스팅 활동에서 프래그먼트를 추가했으며 해당 프래그먼트는 을 사용하여 tabview을 표시합니다. 첫 번째 탭은 이며 CursorLoader을 사용하는 DB의 데이터를 표시하고 두 번째 탭은 mapView입니다.Android : 기기가 켜진 후 FragmentPagerAdapter의 조각이 가로로 데이터를 표시하지 않습니다.

모든 것이 인물 모드에서 잘 작동합니다.

문제는 다음과 같은 경우에 발생합니다

  1. 사용자가 가로 모드에서 응용 프로그램을 사용하고 있습니다. 그는 탭보기 화면을 열었습니다. 데이터는 커서 로더의 목록 뷰에 표시됩니다. Mapview는 두 번째 탭에도 표시됩니다. 지금까지 모든 것이 필요한대로 작동합니다.
  2. 그는 앱을 그대로 두었습니다 (즉, 버튼이나 홈 버튼을 다시 누르지 않았거나 다른 앱으로 전환하지 않았 음을 의미합니다)
  3. 잠시 후 화면이 꺼졌습니다.
  4. 사용자가 기기의 잠금을 해제하면 내 앱의 탭보기가 다시 표시됩니다. 그러나 이제는 listview에 데이터가 표시되지 않고 mapview도 사라졌습니다.

ClientListFragment

public class ClientListFragment extends SwipeRefreshListFragment { 
    private static final String TAG = "ClientListFragment"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.e(TAG, "onCreate"); 
     setHasOptionsMenu(true); 
    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     setColorScheme(R.color.gplus_color_1, R.color.gplus_color_2, 
      R.color.gplus_color_3, R.color.gplus_color_4); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     Log.e(TAG, "onResume"); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     Log.e(TAG, "onActivityCreated"); 
    } 

    @Override 
    public void onPause() { 
     // Log.i(TAG, "onPause"); 
     super.onPause(); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     Log.e(TAG, "onStop"); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     Log.e(TAG, "onDestroy"); 
    } 
} 

지도 조각

public class ClientMapFragment extends Fragment { 

    private static final String TAG = "ClientMapFragment"; 

    private GoogleMap googleMap; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     Log.d(TAG, "onCreate"); 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.map_fragment, container, false); 
     googleMap = ((MapFragment) getFragmentManager().findFragmentById(
       R.id.map)).getMap(); 

     googleMap.setMyLocationEnabled(true); 
     return v; 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
    } 
} 

활동

public class ClientActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     boolean isTablet = getResources().getBoolean(R.bool.isTablet); 
     if (isTablet) 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); 
     else 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); 
     setContentView(R.layout.activity_clients); 

     ClientFragment clientFragment = new ClientFragment(); 
     Bundle bundle = new Bundle(); 
     bundle.putBoolean("ShouldChangeActionBarTitle", true); 
     clientFragment.setArguments(bundle); 
     getFragmentManager() 
       .beginTransaction() 
       .add(R.id.fragmentContainer, clientFragment, 
         getResources().getString(R.string.clients_fragment)) 
       .commit(); 
    } 
} 

FragmentpagerAdapter

public class TabsPagerAdapter extends FragmentStatePagerAdapter { 


private static final String TAG = "TabsPagerAdapter"; 

    private ArrayList<Fragment> mFragments = new ArrayList<Fragment>(); 
    FragmentManager fm; 

    public TabsPagerAdapter(FragmentManager fm) { 
     super(fm); 
     this.fm = fm; 
     mFragments.add(new ClientListFragment()); 
     mFragments.add(new ClientMapFragment()); 
    } 

    @Override 
    public Fragment getItem(int index) { 
     Log.e(TAG, "getItem"); 
     return mFragments.get(index); 
    } 

    @Override 
    public int getCount() { 
     return mFragments.size(); 
    } 
} 

업데이트 그래서 1

은 연구의 시간을 수행 한 후 나는 그것이 FragmentPagerAdapter에서 조각의 상태에 문제가 결론에왔다. 화면이 꺼지면 fragmentpager의 saveState이 호출됩니다 .. 장치가 다시 잠금 해제되면 조각은 이전 상태에서 복원됩니다. 나는 LoaderManager callbacks이 호출되고 DB로부터 데이터가 또한 인출되었는지를 확인했다. 그러나, 화면에 나타나지 않았다.

답변

0

한 번에 내 활동 코드를 살펴 보지도 않았습니다. 매번 새로운 단편이 onCreate()에 만들어졌습니다. 수정은 매우 간단합니다.

if (savedInstanceState == null) { 
    Log.e(TAG, "onCreate savedInstanceState == null"); 
    ClientFragment clientFragment = new ClientFragment(); 
    Bundle bundle = new Bundle(); 
    bundle.putBoolean("ShouldChangeActionBarTitle", 
      shouldChangeActionBarTitle); 
    clientFragment.setArguments(bundle); 
    getFragmentManager() 
      .beginTransaction() 
      .add(R.id.fragmentContainer, clientFragment, 
        getResources().getString(R.string.clients_fragment)) 
      .commit(); 
} 
관련 문제