У меня есть активность, которая содержит ящик для навигации, в этом классе мои элементы навигации указывают на классы фрагментов. В одном из классов фрагментов я использую динамический просмотр пейджера для отображения элементов, но как я могу использовать диспетчер фрагментов класса фрагмента как аргумент пейджера представления, который нуждается в фрагментационном аргументе активности или активности фрагмента. Нужны некоторые решения.Как отобразить фрагмент в viewpager, в классе фрагментов?
ответ
Я делаю что-то подобное прямо сейчас. У меня есть только ViewPager под ящиком навигации, но если у вас более сложный макет, то он должен работать.
Для начала, у меня есть макет активности (большинство из этого было создано с помощью Android Studio)
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.you.yourapp.YourActivity">
<FrameLayout android:id="@+id/your_container" android:layout_width="match_parent"
android:layout_height="match_parent" />
<fragment android:id="@+id/navigation_drawer"
android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent"
android:layout_gravity="start"
android:name="com.example.you.yourapp.NavigationDrawerFragment"
tools:layout="@layout/fragment_navigation_drawer" />
</android.support.v4.widget.DrawerLayout>
Активность использует FragmentManager для замены в другом фрагменте, который содержит ViewPager в FrameLayout
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_your);
...
Fragment fragment = YourFragment.newInstance(Bundle args);
getSupportFragmentManager()
.beginTransaction().replace(R.id.your_container, fragment)
.commit();
}
Фрагмент, который имеет ViewPager просто
<android.support.v4.view.ViewPager android:id="@+id/your_view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
в YourFragment.java реализовать FragmentPagerAdapter (вы могли бы сделать это как внутренний класс, но я столкнулся с проблемами со статическим распределением, плюс это уборщик)
public class YourFragment extends android.support.v4.app.Fragment {
private ViewPager mPager;
public YourFragment() {
}
public static TaskFragment newInstance(Uri uri, String outlineText) {
TaskFragment fragment = new YourFragment();
Bundle args = new Bundle();
//set args
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View rootView = inflater.inflate(R.layout.fragment_your, null);
mPager = (ViewPager) rootView.findViewById(R.id.your_view_pager);
TaskPagerAdapter adapter = new TaskPagerAdapter(getFragmentManager());
mPager.setAdapter(adapter);
return rootView;
}
...
private class YourPagerAdapter extends FragmentStatePagerAdapter {
public YourPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return count; //however you get the count
}
@Override
public android.support.v4.app.Fragment getItem(int position) {
//set the arguments for your page
return PageFragment.newInstance(args);
}
}
}
ETA: Так что теперь реализовать пользовательский интерфейс для навигации ящик обратных вызовов
...
private NavigationDrawerCallbacks mCallbacks
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mCallbacks = (NavigationDrawerCallbacks) activity;
}
...
@Override
public void onClick(View view) { //whatever your click listener is
Fragment fragment = getFragmentSomehow(); //get your fragment
mCallbacks.onNavigationItemSelected(fragment);
}
...
public static interface NavigationDrawerCallbacks {
void onNavigationDrawerItemSelected(Fragment fragment);
}
Теперь есть YourActivity реализовать этот интерфейс
public class YourFragment extends Activity
implements NavigationDrawerCallbacks
{
...
@Override
public void onNavigationDrawerItemSelected(Fragment fragment) {
getSupportFragmentManeger()
.beginTransaction()
.replace(R.id.you_container, fragment)
.commit();
}
...
}
Я думаю, что это то, что вы хотите сделать. Надеюсь, это поможет
- 1. Как отобразить listView в классе фрагментов?
- 2. Как отобразить фрагмент внутри viewpager?
- 3. Android Viewpager Отобразить определенный фрагмент
- 4. Обновление фрагментов в ViewPager
- 5. Замена фрагментов в viewpager
- 6. Заменить фрагмент в ViewPager
- 7. Сохранение содержимого фрагментов в viewpager
- 8. Как отобразить 2 фрагмента в viewpager
- 9. Добавить фрагмент в фрагмент viewPager
- 10. Передача значений в фрагмент ViewPager
- 11. Фрагмент отображения в ViewPager
- 12. как знать, какой фрагмент виден в ViewPager
- 13. фрагмент автоматически обновляется в viewpager
- 14. View.findViewById в классе фрагментов
- 15. Как обновить фрагмент в viewpager?
- 16. Как перезапустить фрагмент в viewPager
- 17. Как реализовать фрагмент в ViewPager?
- 18. Как создать фрагмент в viewpager
- 19. Как добавить фрагмент в ViewPager?
- 20. Фрагмент - ViewPager Common Layout
- 21. Обновить фрагмент в ViewPager
- 22. Android: ViewPager - добавление фрагментов
- 23. Фрагмент содержит ViewPager добавлен в задний стек
- 24. Не удались найти ViewPager фрагментов в андроиде
- 25. Android viewpager in фрагмент
- 26. Обновить данные в ViewPager Фрагмент
- 27. ViewPager внутри Фрагмент не восстанавливает состояние дочерних фрагментов
- 28. Можно ли немного отобразить следующий фрагмент на viewpager в Android?
- 29. Как предотвратить предварительную загрузку фрагментов в viewpager?
- 30. ViewPager - Обновить фрагмент из активности
может размещать код? – Krish