【发布时间】:2021-08-19 10:38:50
【问题描述】:
我刚开始学习安卓。我有一个 Activity 类,我想将它重定向到导航栏的 ViewPage 中的片段? 我尝试了很多方法,但它不起作用。希望能帮到你!!! 我的代码: 有一个 MainActivity.java 有一个 ViewPager 和 BottomNavigationView
public class MainActivity extends AppCompatActivity {
BottomNavigationView navigationView;
ViewPager mViewPager;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
navigationView = findViewById(R.id.nav);
mViewPager = findViewById(R.id.view_pager);
setUpViewPager();
navigationView.setOnNavigationItemReselectedListener(new BottomNavigationView.OnNavigationItemReselectedListener() {
@Override
public void onNavigationItemReselected(@NonNull MenuItem item) {
if(item.getItemId()== R.id.cld){
mViewPager.setCurrentItem(0);
} else if(item.getItemId()== R.id.tdl){
mViewPager.setCurrentItem(1);
}else if(item.getItemId()== R.id.dnr){
mViewPager.setCurrentItem(2);
}else if(item.getItemId()== R.id.us){
mViewPager.setCurrentItem(3);
}
}
});
try {
Field field = CursorWindow.class.getDeclaredField("sCursorWindowSize");
field.setAccessible(true);
field.set(null, 100 * 1024 * 1024); //the 100MB is the new size
} catch (Exception e) {
e.printStackTrace();
}
}
private void setUpViewPager() {
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(), FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
mViewPager.setAdapter(viewPagerAdapter);
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
switch (position){
case 1:
navigationView.getMenu().findItem(R.id.tdl).setChecked(true);
break;
case 2:
navigationView.getMenu().findItem(R.id.dnr).setChecked(true);
break;
case 3:
navigationView.getMenu().findItem(R.id.us).setChecked(true);
break;
default: navigationView.getMenu().findItem(R.id.cld).setChecked(true);
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
}
ViewPageApdater 类
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
public ViewPagerAdapter(@NonNull FragmentManager fm, int behavior) {
super(fm, behavior);
}
@NonNull
@Override
public Fragment getItem(int position) {
switch (position){
case 1: return new ListTodo();
case 2: return new dinary_form();
case 3: return new UserInfor();
case 0:
default: return new Calendar();
}
}
@Override
public int getCount() {
return 5;
}
}
我想移动 Activity 类,但我遇到了问题: java.lang.IllegalArgumentException:没有为片段 ListTodo{bbdabd4 (d10d7649-01eb-4b76-8342-fbf47138d234) id=0x7f0a01d3}
找到 id 0x7f0a01d3 (com.example.projectminibook:id/view_pager) 的视图我从 activitymain 中 ViewPager 布局的 id 中获取 id/view_paper。不知道哪里错了
public class AddTodo extends AppCompatActivity {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Button btnCancel = findViewById(R.id.btnCancel);
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ListTodo fragment = new ListTodo();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.view_pager,fragment);
fragmentTransaction.commit();
}
});
}
}
ListTodo.java
public class ListTodo extends Fragment{
//mycode
}
我希望你能帮助我。非常感谢
【问题讨论】:
-
嘿伙计,我认为您的问题是您只有四个片段,而您正试图获得 5 个片段。因为这个
@Override public int getCount() { return 5; }尝试返回4个片段。 -
这不是我的问题
标签: java android android-fragments android-viewpager