I am using the Master / Detail design for my Android app. If I click an item in a list in an ItemListActivity, the position is assigned to my ItemDetailActivity. This tool implements ViewPager and FragmentStatePagerAdapter. So I want to scroll between the detailed views.
I can’t say that the ViewPager starts at the desired position (integer from ItemListActivity). My ViewPager always starts at position 0 of my list, regardless of which one I clicked on the list.
This is my code:
ItemDetailActivity
public class ItemDetailActivity extends FragmentActivity {
RSSFeed feed;
int pos;
private static List<Fragment> fragments;
private ViewPager mPager;
private PagerAdapter mPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_item_detail);
feed = (RSSFeed) getIntent().getExtras().get("feed");
pos = getIntent().getExtras().getInt("pos");
fragments = new ArrayList<Fragment>();
for(int i=0; i<=20; i++)
fragments.add(ItemDetailFragment.create(i ,feed));
mPager = (ViewPager) findViewById(R.id.viewpager);
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
mPager.setPageTransformer(true, new ZoomOutPageTransformer());
}
@Override
public void onBackPressed() {
if (mPager.getCurrentItem() == 0) {
super.onBackPressed();
} else {
mPager.setCurrentItem(mPager.getCurrentItem() - 1);
}
}
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int page_number) {
return fragments.get(page_number);
}
@Override
public int getCount() {
return feed.getItemCount();
}
}
ItemDetailFragment:
public class ItemDetailFragment extends Fragment {
private static int fPos;
static RSSFeed fFeed;
private ShareActionProvider mShareActionProvider;
Date pDate;
public ItemDetailFragment() {
}
public static ItemDetailFragment create(int pos, RSSFeed feed) {
ItemDetailFragment fragment = new ItemDetailFragment();
Bundle args = new Bundle();
args.putSerializable("feed", feed);
args.putInt("pos", pos);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
fFeed = (RSSFeed) getArguments().getSerializable("feed");
fPos = getArguments().getInt("pos");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater
.inflate(R.layout.detail_fragment, container, false);
return view;
}
@SuppressLint("SetJavaScriptEnabled")
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
activity_item_detail.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/lib/com.google.ads"
android:id="@+id/main_item_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<FrameLayout
android:id="@+id/item_detail_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/adView"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
tools:context=".ItemDetailActivity"
tools:ignore="MergeRootFrame" >
</FrameLayout>
So, at the moment I can fill all the objects, but always starts with the first element. I want to run it in this element, which I clicked on my list.
?