当前位置: 首页 > 知识库问答 >
问题:

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

宗政博
2023-03-14

我刚开始学Android。我有一个活动类,我想把它重定向到导航栏的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:找不到id 0x7F0A01D3(com.example.projectminibook:id/view_pager)的片段ListTodo的视图{bbdabd4(d10d7649-01eb-4b76-8342-fbf47138d234)id=0x7F0A01D3}

我从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
}

我希望你能帮助我。非常感谢

共有1个答案

袁运锋
2023-03-14
@Override
        public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
            Fragment fragment = null;
            switch (menuItem.getItemId()) {
                case R.id.cld:
                    fragment = new Calendar();
                    break;

                case R.id.tdl:
                    fragment = new ListTodo();
                    break;

                case R.id.dnr:
                    fragment = new dinary_form();
                    break;

                case R.id.us:
                    fragment = new UserInfor();
                    break;

                default:
                    fragment = new Calendar();
                    break;
            }
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();
            return true;
        }
 类似资料:
  • //使用startActivity(intent)也不起作用//无论我做什么,应用程序都会崩溃

  • 我一整天都被困在这个问题上,我似乎找不到一个适合我的情况的答案,足以让我使用。 当我单击一个列表项时,比如Blue,在Portraint中,我希望它显示一个新的片段,这是一个蓝色的屏幕,而在Sandwork中,它在半个屏幕上显示该片段,在另一个屏幕上显示listview。我正在使用ActionBarSherlock和碎片来完成这一点。 我从里到外构建了它,所以我从一个列表开始,它按照我想要的方式工

  • 我是Android开发的新手,我在将firebase auth从SignInActivity传递到HomeFragment上有一个问题。代码是这样的 公共类SignInActivity扩展AppCompatActivity } 这是HomeFragment片段 公共类HomeFragment扩展Fragment{ } 这是logcat 致命异常:主进程:clouwiko.dev.prasiku,P

  • 我已经完成了导航,现在进入第一个片段。在第一个片段中有两个按钮,我需要通过按下这些按钮来切换到一个新的活动。我不明白如何正确地实施它。我犯了一个错误。 代码,eror

  • 我是android的初学者。我试图找到一种方法将文本从活动的editText传输到片段,以便结果显示在片段的textview中。

  • 我正在建立一个简单的应用程序,我想从片段回到物理按钮的活动。我该怎么做?我试图杀死碎片,但它不起作用。