android - 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);” 工作不正常?
解决方案
推荐阅读
- java - 无法在 JavaCard 上加载小程序
- css - How to reverse a CSS transition animation when removing an active class?
- r - 使用 regex 和 grepl 检测以特定模式开头的单词
- unit-testing - 如何断言与stretchr/testify/mock AssertCalled 的部分匹配?
- android - Android:测试室迁移
- arrays - 将数组数据转换为 bmp
- sql-server-2008 - 由于未连接套接字且未提供地址,因此不允许发送或接收数据的请求 - SSIS 2008
- php - 发送电子邮件的 Web 表单不发送到 gmail
- python - Pyusb 无法识别 USB 设备(python 3.9.6 和 windows)
- discord.js - Discord.JS 录音大 pcm 文件