Я использую ViewPager для отображения 9 фрагментов. В каждом из этих фрагментов я хочу просто показать другую картину. Я хочу использовать один макет фрагмента, но динамически добавлять изображение. Кроме того, хотелось бы добавить кнопку «Продолжить» на последнем фрагменте, который при нажатии переходит к другому действию.Android: Использование ViewPager с несколькими динамическими фрагментами
Как мне сделать динамическое размещение фрагмента?
Основная деятельность
public class StoryboardPageActivity extends FragmentActivity {
// The number of pages (wizard steps) to show in this demo.
private static final int NUM_PAGES = 9;
// The pager widget, which handles animation and allows swiping horizontally to access previous and next wizard steps.
private ViewPager mPager;
// The pager adapter, which provides the pages to the view pager widget.
private PagerAdapter mPagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_storyboard_page);
// Instantiate a ViewPager and a PagerAdapter.
mPager = (ViewPager) findViewById(R.id.storyboardPager);
mPagerAdapter = new StoryboardPagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
}
@Override
public void onBackPressed() {
if (mPager.getCurrentItem() == 0) {
// If the user is currently looking at the first step, allow the system to handle the
// Back button. This calls finish() on this activity and pops the back stack.
super.onBackPressed();
} else {
// Otherwise, select the previous step.
mPager.setCurrentItem(mPager.getCurrentItem() - 1);
}
}
// A simple pager adapter that represents 5 fragment objects, in sequence.
private class StoryboardPagerAdapter extends FragmentStatePagerAdapter {
public StoryboardPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return StoryboardFragment.newInstance(position);
}
@Override
public int getCount() {
return NUM_PAGES;
}
}
}
Фрагмент
public class StoryboardFragment extends Fragment {
private static final String KEY_POSITION = "position";
static StoryboardFragment newInstance(int position) {
StoryboardFragment frag = new StoryboardFragment();
Bundle args = new Bundle();
args.putInt(KEY_POSITION, position);
frag.setArguments(args);
return(frag);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_storyboard_page, container, false);
ImageView image = (ImageView)rootView.findViewById(R.id.imgStoryboard);
int position = getArguments().getInt(KEY_POSITION, -1);
int[] images = {R.drawable.storyboard1, R.drawable.storyboard2, R.drawable.storyboard3,
R.drawable.storyboard4, R.drawable.storyboard5, R.drawable.storyboard6,
R.drawable.storyboard7, R.drawable.storyboard8, R.drawable.storyboard9};
image.setImageResource(images[position]);
return rootView;
}
}
Фрагмент XML
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff" >
<ImageView
android:id="@+id/imgStoryboard"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:contentDescription="@string/storyboardSlide" />
</RelativeLayout>
Я изменил свой код после просмотра вашего образца проекта, но когда я перехожу к активности, он не загружается правильно. Он не сбой, но он просто не загружает и не перезагружает Main Я обновил код выше. Можете ли вы дать мне указатель или два? –
@ D-Rock: «он просто не загружает и не перезагружает основную деятельность» - я не знаю, что вы подразумеваете под этим, извините. Помимо создания 'images' будет' static final int [] ', я не вижу никаких очевидных проблем с тем, что у вас здесь. – CommonsWare
это была проблема с тем, что изображения с высоким разрешением находились в обычной папке 'drawables' вместо папки' xhdpi'. Мне пришлось искать ошибку в LogCat. Спасибо, что указал мне в правильном направлении! –