有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在ViewPage中从活动移动到片段?找不到片段id的视图

我刚开始学安卓。我有一个活动类,我想将其重定向到导航栏的ViewPage中的一个片段? 我尝试了很多方法,但都不管用。我希望能帮上忙!!! 我的代码: 有一个主要的活动。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;
    }
}

活动课我想搬家,但我有个问题: JAVAlang.IllegalArgumentException:未找到片段列表的id 0x7f0a01d3(com.example.projectminibook:id/view_pager)的视图{bbdabd4(d10d7649-01eb-4b76-8342-fbf47138d234)id=0x7f0a01d3}

我从activitymain中的ViewPager布局id中获取id/view_纸张。我不知道哪里错了

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。爪哇

public class ListTodo extends Fragment{
  //mycode
}

我希望你能帮助我。多谢各位


共 (1) 个答案

  1. # 1 楼答案

    只需在^{中尝试下面的代码


    @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                Fragment fragment = null;
                switch (menuItem.getItemId()) {
                    case R.id.cld:
                        viewPager.setCurrentItem(0);
                        break;
    
                    case R.id.tdl:
                        viewPager.setCurrentItem(1);
                        break;
    
                    case R.id.dnr:
                        viewPager.setCurrentItem(2);
                        break;
    
                    case R.id.us:
                        viewPager.setCurrentItem(3);
                        break;
    
                    default:
                        viewPager.setCurrentItem(0);
                        break;
                }
                return true;
            }
    

    我想在你的MainActivity中更新这段代码之后,你的问题就解决了。快乐编码;)


    更新

    上面的代码也有一些小改动&;对于viewPager方法,请使用下面的代码编辑onPageSelected()方法的代码

     @Override
                public void onPageSelected(int position) {
                    switch (position){
                        case 1:
                            NavigationView.setSelectedItemId(R.id.tdl);
                            break;
                        case 2:
                            NavigationView.setSelectedItemId(R.id.dnr);
                            break;
                        case 3:
                            NavigationView.setSelectedItemId(R.id.us);
                            break;
                        default: 
                            NavigationView.setSelectedItemId(R.id.cld);
                            break;
    
                    }
                }