Замена фрагмента на Viewpager становится пустой (Android) - PullRequest
0 голосов
/ 23 октября 2018

Всякий раз, когда я пытаюсь заменить свой фрагмент в утилите-адаптере, фрагмент становится пустым.

Вот как я настроил свой код:

У меня есть программа просмотра с 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;

    }

}

* СПАСИБО ЗА ПРЕДЕЛА ДЛЯ ПОМОЩИ.Я МОГУ РАЗРАБОТАТЬ, ЕСЛИ НУЖНО *

...