[英]How to move from Activity to Fragment in ViewPage? No view found for id for fragment
I just started learning android.我刚开始学习android。 I have a Activity class and I want to redirects it to a fragment in ViewPage of a Navigation bar?我有一个活动 class 并且我想将其重定向到导航栏的 ViewPage 中的片段? I try many ways but it don't work.我尝试了很多方法,但它不起作用。 I hope to help:.!我希望有所帮助:.! My code: There is a MainActivity.java has a ViewPager and BottomNavigationView我的代码:有一个 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 class ViewPageApdater class
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;
}
}
And Activity class I want to move and I have a problem: java.lang.IllegalArgumentException: No view found for id 0x7f0a01d3 (com.example.projectminibook:id/view_pager) for fragment ListTodo{bbdabd4 (d10d7649-01eb-4b76-8342-fbf47138d234) id=0x7f0a01d3} And Activity class I want to move and I have a problem: java.lang.IllegalArgumentException: No view found for id 0x7f0a01d3 (com.example.projectminibook:id/view_pager) for fragment ListTodo{bbdabd4 (d10d7649-01eb-4b76-8342- fbf47138d234) id=0x7f0a01d3}
I take id/view_paper from id of ViewPager layout in activitymain.我从 activitymain 中的 ViewPager 布局的 id 中获取 id/view_paper。 I dont know where wrong我不知道哪里错了
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 ListTodo.java
public class ListTodo extends Fragment{
//mycode
}
I hope you can help me.我希望你能帮助我。 Thank you very much非常感谢
onNavigationItemSelectedListener
只需在onNavigationItemSelectedListener
中尝试以下代码@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
.我认为在MainActivity
中更新此代码后,您的问题将是 go 。 Happy Coding;)快乐编码;)the upper code also has minor changes & for the viewPager
please edit your code of onPageSelected()
method with below code上面的代码也有微小的变化&对于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;
}
}
illegalArgumentException
error.这就是您收到此illegalArgumentException
错误的原因。1). 1)。 you have to navigate to that activity first.您必须先导航到该活动。
2). 2)。 you have to check that the navigated activity is where come from.您必须检查导航活动的来源。 for this you can use Intent's put extra method.为此,您可以使用 Intent 的 put extra 方法。
3). 3)。 if the intent.put extra has any value then you have to navigate from one fragment to another.如果intent.put extra 有任何价值,那么您必须从一个片段导航到另一个片段。 In your case, you have to navigate from calender fragment to ListTodo fragment in main activity.在您的情况下,您必须在主要活动中从日历片段导航到 ListTodo 片段。
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) {
startActivity(new Intent(activity, MainActivity.class).putExtra("from","AddTodo"));
}
});
}
}
MainActivity
's onCreate method you have to code like this. & 在MainActivity
的 onCreate 方法中,您必须像这样编写代码。String comeFrom = getIntent().getStringExtra("from");
if (!(comeFrom.equals("") || comeFrom.isEmpty()) && comeFrom.equals("AddTodo")){
viewPager.setCurrentItem(1); //because your list todo fragment is 2nd fragment in your viewpager
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.