单击Bottom Bar菜单选项上的第二次,整个活动的数据变为空白

时间:2017-12-05 05:41:35

标签: java android bottomnavigationview bottombar

我的android底部栏有问题。当我第二次单击底部菜单选项时,它变为空白。什么是基本问题?我哪里错了?它在logcat中没有显示错误或异常。

这是我的代码

    public class BottomBarActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_bottom_bar);


            final BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.navigation);
            bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    //                Fragment selectedFragment = null;
                    switch (item.getItemId()) {
                        case R.id.action_library:
                            FragmentLibrary fragmentLibrary = new FragmentLibrary();
                            FragmentManager fragmentManager = getSupportFragmentManager();
                            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                            fragmentTransaction.add(R.id.frame_layout1, fragmentLibrary);
                            fragmentTransaction.commit();

                            Toast.makeText(BottomBarActivity.this, "Library", Toast.LENGTH_SHORT).show();
                            break;
                        case R.id.action_notification:
//002
                            Fragment selectedFragmentNotification = FragmentNotification.newInstance();
                            FragmentTransaction fragmentTransactionNotification = getSupportFragmentManager().beginTransaction();
                            fragmentTransactionNotification.replace(R.id.frame_layout1, selectedFragmentNotification);
                            fragmentTransactionNotification.commit();
                            Toast.makeText(BottomBarActivity.this, "Notifications", Toast.LENGTH_SHORT).show();
                            break;
                        case R.id.action_more:
                            Fragment selectedFragmentMore = FragmentMore.newInstance();
                            FragmentTransaction fragmentTransactionMore = getSupportFragmentManager().beginTransaction();
                            fragmentTransactionMore.replace(R.id.frame_layout1, selectedFragmentMore);
                            fragmentTransactionMore.commit();
                            Toast.makeText(BottomBarActivity.this, "More", Toast.LENGTH_SHORT).show();
                            break;
                        case R.id.action_discovered:
                            Fragment selectedFragmentMain = FragmentMain.newInstance();
                            FragmentTransaction fragmentTransactionMain = getSupportFragmentManager().beginTransaction();
                            fragmentTransactionMain.replace(R.id.frame_layout1, selectedFragmentMain);
                            fragmentTransactionMain.commit();
                            Toast.makeText(BottomBarActivity.this, "Discover", Toast.LENGTH_SHORT).show();
                            break;
                    }
                    return true;
                }
            });
            //Manually displaying the first fragment

            Fragment selectedFragment = FragmentMain.newInstance();
            FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
            fragmentTransaction.replace(R.id.frame_layout1, selectedFragment);
            fragmentTransaction.commit();

        }
    }

这是片段类代码。 单击其中一个菜单项时会调用此片段。

public class FragmentLibrary extends Fragment {

    private static final String ARG_POSITION = "position";
    private int position;

    private PagerSlidingTabStrip tabs_L;
    private ViewPager pager_L;

    public FragmentLibrary() {

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        final View view = inflater.inflate(R.layout.fragment_library, container, false);

        pager_L = (ViewPager) view.findViewById(R.id.pagerL);
        pager_L.setAdapter(new MyAdapterLibrary(getFragmentManager()));
        tabs_L = (PagerSlidingTabStrip) view.findViewById(R.id.tabsL);
        tabs_L.setViewPager(pager_L);

        return view;
    }


    // ADAPTER CLASS
    public class MyAdapterLibrary extends FragmentPagerAdapter {
        private String[] titles = {
                getString(R.string.tab_title_current_reading),
                getString(R.string.tab_title_reading_lists),
                getString(R.string.tab_title_history)
        };

        public MyAdapterLibrary(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return FragmentCurrentReading.newInstance(position);
                case 1:
                    return FragmentReadingLists.newInstance(position);
                case 2:
                    return FragmentHistory.newInstance(position);
            }
            return null;
        }

        @Override
        public int getCount() {
            return titles.length;
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return titles[position];
        }
    }
}

First time it look like this.

After click second time all data goes blank.

1 个答案:

答案 0 :(得分:0)

因为每次单击菜单项时都会创建一个新的片段实例。

case R.id.action_library:
    FragmentLibrary fragmentLibrary = new FragmentLibrary(); // Here
    ...
    break;

尝试在项目单击侦听器之外创建片段的实例。例如,在onCreate方法中;