アクティビティでホストされているViewPagerにあるフラグメントにRecyclerViewがあります。このプロジェクトには、アイテムをリストするMainActivityと、最初のアクティビティで選択したアイテムの詳細を示すDetailActivityという2つのアクティビティがあります。ViewPagerは常に0番目の位置から開始します
私がDetailsActivityからMainActivityに移行すると、私は常にViewPagerの最初の断片であるFragment position 0に移ります。フラグメントの位置を復元するにはどうしたらいいですか?
DetailActivityからMainActivityに移動すると、バンドルは常に空です。
ここにはフルcode of the appがあります。
MainActivity
public class MainActivity extends AppCompatActivity {
private ViewPager mViewPager;
private static final String LOG = MainActivity.class.getSimpleName();
private static final String VIEWPAGER_POSITION = "currentItem";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_titles);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mViewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(mViewPager);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
if (savedInstanceState != null) {
int pos = savedInstanceState.getInt(VIEWPAGER_POSITION, 0);
Log.d(LOG, "onCreate pos: " + pos);
mViewPager.setCurrentItem(pos);
} else {
Log.d(LOG, "onCreate savedInstanceState is null");
}
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new PopularFragment(), getResources().getString(R.string.popularity));
adapter.addFragment(new RatingFragment(), getResources().getString(R.string.rating));
adapter.addFragment(new FavoriteFragment().newInstance(), getResources().getString(R.string.favorite));
viewPager.setAdapter(adapter);
}
public static class ViewPagerAdapter extends FragmentStatePagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onSaveInstanceState(Bundle bundle) {
super.onSaveInstanceState(bundle);
int pos = mViewPager.getCurrentItem();
Log.d(LOG, "onSaveInstanceState pos: " + pos);
bundle.putInt(VIEWPAGER_POSITION, mViewPager.getCurrentItem());
}
}
感謝。あなたがバンドルを探し、バックDetailActivityから行くとき、私は、撮影しています
私はどこでもインテントを使用していません。 –
戻ってきたときにどの断片が開いていたのかを知りたいですか?それを意図して入れてください –
私は復元状態から来たところに戻って行きたいです。インテントの場合、私はViewPagerの位置をMainActivityからDetailActivityに送ってMainActivityに戻さなければなりません。そうですか?それは多くの意味を持たない。 –