Всякий раз, когда я пытаюсь заменить свой фрагмент в утилите-адаптере, фрагмент становится пустым.
Вот как я настроил свой код:
У меня есть программа просмотра с 4 фрагментами.Он также выровнен по нижнему виду навигации, что означает, что я могу изменять фрагменты, перемещая их влево и вправо, и я также могу изменять фрагменты с помощью навигационной панели.Поэтому нижняя панель навигации настроена так:
Фрагмент 1 |Фрагмент 2 |Фрагмент 3 |Фрагмент 4
Пейджер отлично работает и может легко переключаться между этими 4 фрагментами.
Но тогда у меня также есть recyclerAdapter, который настроил просмотры карт внутри Fragment 2 (RecyclerAdapter находится в отдельном Java-классе, а НЕ внутри Java-класса Fragment 2).
Итак, внутри Фрагмента 2 у меня есть 4 разных фрагмента, которые я собираюсь называть: Фрагмент 2.1, Фрагмент 2.2, Фрагмент 2.3 и Фрагмент 2.4.Всякий раз, когда я нажимаю на позицию одного из видов карт, я должен изменить фрагмент на Фрагмент 2.1, Фрагмент 2.2, Фрагмент 2.3 или Фрагмент 2.4.В зависимости от того, на какую карту я нажал.
Эти фрагменты 2.1, 2.2, 2.3 и 2.4 не добавляются в пейджер.
Но я настроил код в утилите-адаптере для изменения фрагментов по запросу.К сожалению, я получаю пустой фрагмент, когда пытаюсь это сделать.Поэтому мой вопрос, как я могу изменить фрагменты, которые добавляются в viewpager?Должен ли я добавить фрагменты 2.1, 2.2, 2.3 и 2.4 в viewpager, или я могу как-то заменить его на начало транзакции?Код выглядит следующим образом:
RecyclerAdapter (где я должен изменить фрагмент, нажав на позицию просмотра карты):
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> {
@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from( viewGroup.getContext() ).inflate( R.layout.fragment_card_view_tabel, viewGroup, false );
viewGroup.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
}
} );
return new RecyclerViewHolder( view );
}
@Override
public void onBindViewHolder(RecyclerViewHolder recyclerViewHolder, int position) {
recyclerViewHolder.mBeskrivelse.setText( OurData.beskrivelse[position] );
recyclerViewHolder.mTitle.setText( OurData.title[position] );
recyclerViewHolder.cardView.setCardBackgroundColor( Color.parseColor( OurData.colors[position] ) );
}
@Override
public int getItemCount() {
return OurData.title.length;
}
class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public int nummer;
private TextView mBeskrivelse;
private TextView mTitle;
private CardView cardView;
private ViewPager mPager;
public RecyclerViewHolder(View itemView) {
super( itemView );
mPager = (ViewPager) itemView.findViewById( R.id.flMain );
mBeskrivelse = (TextView) itemView.findViewById( R.id.item_beskrivelse );
mTitle = (TextView) itemView.findViewById( R.id.item_title );
cardView = (CardView) itemView.findViewById( R.id.card_view );
itemView.setOnClickListener( this );
}
@Override
public void onClick(View v) {
nummer = getAdapterPosition();
if (nummer == 0) {
//mPager.setCurrentItem(0);
((FragmentActivity) itemView.getContext()).getSupportFragmentManager().beginTransaction().replace( R.id.flMain, new DataTabelFragment() ).addToBackStack( null ).commit();
} else if (nummer == 1) {
((FragmentActivity) itemView.getContext()).getSupportFragmentManager().beginTransaction().replace( R.id.flMain, new Sensor1Fragment() ).commit();
} else if (nummer == 2) {
((FragmentActivity) itemView.getContext()).getSupportFragmentManager().beginTransaction().replace( R.id.flMain, new Sensor2Fragment() ).commit();
} else if (nummer == 3) {
((FragmentActivity) itemView.getContext()).getSupportFragmentManager().beginTransaction().replace( R.id.flMain, new Sensor3Fragment() ).commit();
}
}
}
}
ViewPagerAdapter (Это где мои фрагменты из нижней навигационной панелидобавлено):
public class ViewPageAdapter extends FragmentStatePagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<Fragment> mFragmentListCardView = new ArrayList<>();
private final List<String> nameArray = new ArrayList<>();
public ViewPageAdapter(FragmentManager fm) {
super( fm );
}
public void addFragment(Fragment fragment, String name) {
mFragmentList.add( fragment );
nameArray.add(name);
}
public void addFragmentCardView(Fragment fragment) {
mFragmentListCardView.add( fragment );
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get( position );
}
@Override
public int getCount() {
return mFragmentList.size();
}
//public int getItemPosition(Object object) {
// return POSITION_NONE;
//}
}
MainActivity (где я добавляю фрагменты в ViewPagerAdapter):
public void setupViewPager(ViewPager viewPager) {
ViewPageAdapter adapter = new ViewPageAdapter( getSupportFragmentManager() );
adapter.addFragment( new StartsideFragment(), "StartsideFragment" );
adapter.addFragment( new CardViewTabelFragment(), "CardViewTabelFragment" );
adapter.addFragment( new SensorOversigtFragment(), "SensorOversigtFragment" );
adapter.addFragment( new KontaktFragment(), "KontaktFragment" );
viewPager.setAdapter( adapter );
}
public void setViewPager(int fragmentNumber) {
mPager.setCurrentItem( fragmentNumber );
}
public void enableViewPagerSwitch() {
mPager.addOnPageChangeListener( new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if (prevMenuItem != null) {
prevMenuItem.setChecked( false );
} else {
mBottomNav.getMenu().getItem( 0 ).setChecked( false );
navigationView.getMenu().getItem( 0 ).setChecked( false );
}
Log.d( "page", "onPageSelected: " + position );
mBottomNav.getMenu().getItem( position ).setChecked( true );
navigationView.getMenu().getItem( position ).setChecked( true );
prevMenuItem = mBottomNav.getMenu().getItem( position );
prevMenuItem = navigationView.getMenu().getItem( position );
}
@Override
public void onPageScrollStateChanged(int state) {
}
} );
setupViewPager( mPager );
}
public void bot_Navigation() {
mBottomNav = (BottomNavigationView) findViewById( R.id.nav_bot );
botNavHelper.disableShiftMode( mBottomNav );
mBottomNav.setOnNavigationItemSelectedListener( new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.bot_startside:
setViewPager( 0 );
break;
case R.id.bot_datatabel:
setViewPager( 1 );
break;
case R.id.bot_sensorOversigt:
setViewPager( 2 );
break;
case R.id.bot_kontakt:
setViewPager( 3 );
break;
case R.id.bot_logUd:
setViewPager( 4 );
alertDialog();
break;
}
return true;
}
} );
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
onCreate2();
bot_Navigation();
}
protected void onCreate2() {
setContentView( R.layout.activity_main );
Toolbar toolbar = (Toolbar) findViewById( R.id.toolbar );
setSupportActionBar( toolbar );
TextView mTitle = (TextView) toolbar.findViewById( R.id.toolbartitle );
mTitle.setText( toolbar.getTitle() );
getSupportActionBar().setDisplayShowTitleEnabled( false );
mPager = (ViewPager) findViewById( R.id.flMain );
enableViewPagerSwitch();
DrawerLayout drawer = (DrawerLayout) findViewById( R.id.drawer_layout );
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close );
drawer.addDrawerListener( toggle );
toggle.syncState();
navigationView = (NavigationView) findViewById( R.id.nav_view );
navigationView.setNavigationItemSelectedListener( this );
navigationView.setCheckedItem( R.id.nav_startside );
}
* ДОБАВЛЕН КОД ФРАГМЕНТА 2 ЗДЕСЬ *
открытый класс CardViewTabelFragment extends Fragment {
private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
public CardViewTabelFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate( R.layout.card_list, container, false );
recyclerView = (RecyclerView) view.findViewById( R.id.recycler_view );
adapter = new RecyclerAdapter();
recyclerView.setAdapter( adapter );
final RecyclerView.LayoutManager layoutManager = new LinearLayoutManager( getActivity() );
((LinearLayoutManager) layoutManager).setOrientation( LinearLayoutManager.VERTICAL );
recyclerView.setLayoutManager( layoutManager ) ;
return view;
}
}
* СПАСИБО ЗА ПРЕДЕЛА ДЛЯ ПОМОЩИ.Я МОГУ РАЗРАБОТАТЬ, ЕСЛИ НУЖНО *