首页 > 解决方案 > ViewPager 加载不同的片段

问题描述

我创建了我的 PagerAdapter:

public class PagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();

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

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment) {
        mFragmentList.add(fragment);
    }
}

得到了 3 个这样构造的不同片段:

public class chargerOperationsList extends Fragment {
    ListView listview;
    List<ChargingOperationGet> list2;
    ProgressBar progressBar;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View myView = inflater.inflate(R.layout.activity_charger_operations_list, null);

        listview = (ListView) myView.findViewById(R.id.listView);
        progressBar = (ProgressBar) myView.findViewById(R.id.progressBar2);
        progressBar.setVisibility(View.VISIBLE);

        asyncGet asyncget = new asyncGet(this);
        asyncget.execute();


        return myView;
    }

    public void setListOnMainClass(List<ChargingOperationGet> list2)
    {
        this.list2=list2;
        CustomListAdapter customListAdapter = new CustomListAdapter(getActivity(), R.layout.customlistlayout, list2);
        listview.setAdapter(customListAdapter);
    }


    public void setProgressBarInvisible()
    {
        progressBar.setVisibility(View.INVISIBLE);
    }
}

还有我的主类,它有 BottomNavigationView (id:navigation) 和 ViewPager(id:viewpager):

public class MainBottom extends AppCompatActivity {

SecondFragment secondFragment;
Connect connectFragment;
chargerOperationsList chargerOperationsList;

ViewPager viewPager;
MenuItem prevMenuItem;
BottomNavigationView navigation;

    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_home:
                   viewPager.setCurrentItem(0);
                   break;
                case R.id.navigation_dashboard:
                    viewPager.setCurrentItem(1);
                    break;
                case R.id.navigation_notifications:
                    if(!BluetoothAdapter.getDefaultAdapter().isEnabled()) {
                        Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                        startActivityForResult(enableBtIntent , 0);
                    }

                    if(BluetoothAdapter.getDefaultAdapter().isEnabled()) {
                        viewPager.setCurrentItem(2);
                    }

                    break;
            }
            return false;
        }
    };


    private void setupViewPager(ViewPager viewPager)
    {
        PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager());
        secondFragment = new SecondFragment();
        chargerOperationsList = new chargerOperationsList();
        connectFragment = new Connect();
        adapter.addFragment(secondFragment);
        adapter.addFragment(chargerOperationsList);
        adapter.addFragment(connectFragment);
        viewPager.setAdapter(adapter);
    }




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

       navigation = (BottomNavigationView) findViewById(R.id.navigation);
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);

        viewPager = (ViewPager) findViewById(R.id.viewpager);

        viewPager.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
                {
                    navigation.getMenu().getItem(0).setChecked(false);
                }
                Log.d("page", "onPageSelected: "+position);
                navigation.getMenu().getItem(position).setChecked(true);
                prevMenuItem = navigation.getMenu().getItem(position);

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        setupViewPager(viewPager);
     //   loadFragment(new SecondFragment());
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
           // viewPager.setCurrentItem(2);
        }
        if (resultCode == RESULT_CANCELED) {
            Toast.makeText(getApplicationContext(), "Cannot be done", Toast.LENGTH_SHORT).show();
        }
    }
}

当我尝试选择这 3 个片段之一时,它们显示不正确。看起来他们正在相互混合。也许“viewPager.setCurrentItem(0);” 工作不正常?

标签: androidandroid-viewpager

解决方案


推荐阅读