Fragments
및 FragmentPagerAdapter
을 사용하여 스 와이프하여 tabview를 만들었습니다. 프래그먼트의 호스팅 활동에서 프래그먼트를 추가했으며 해당 프래그먼트는 을 사용하여 tabview
을 표시합니다. 첫 번째 탭은 이며 CursorLoader
을 사용하는 DB의 데이터를 표시하고 두 번째 탭은 mapView
입니다.Android : 기기가 켜진 후 FragmentPagerAdapter의 조각이 가로로 데이터를 표시하지 않습니다.
모든 것이 인물 모드에서 잘 작동합니다.
문제는 다음과 같은 경우에 발생합니다
- 사용자가 가로 모드에서 응용 프로그램을 사용하고 있습니다. 그는 탭보기 화면을 열었습니다. 데이터는 커서 로더의 목록 뷰에 표시됩니다. Mapview는 두 번째 탭에도 표시됩니다. 지금까지 모든 것이 필요한대로 작동합니다.
- 그는 앱을 그대로 두었습니다 (즉, 버튼이나 홈 버튼을 다시 누르지 않았거나 다른 앱으로 전환하지 않았 음을 의미합니다)
- 잠시 후 화면이 꺼졌습니다.
- 사용자가 기기의 잠금을 해제하면 내 앱의 탭보기가 다시 표시됩니다. 그러나 이제는 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로부터 데이터가 또한 인출되었는지를 확인했다. 그러나, 화면에 나타나지 않았다.