Java 如何将导航抽屉与Buttom导航视图协调
我对android开发相当陌生。我正在检查material design库,我已经实现了一个导航抽屉,带有底部导航,可以轻松地在片段中导航。这两个组件都工作得很好,但我不知道如何使用这两个组件协调导航。例如,当在导航抽屉上切换片段时,它会更改布局,但按钮导航选定项不会随之更改 如何解决此问题,并将这两个组件链接起来,以便彼此协作并同步已更改的选定项 这就是我的java文件的样子,下面是GitHub上整个项目的链接: 先谢谢你Java 如何将导航抽屉与Buttom导航视图协调,java,android,android-layout,android-fragments,navigation-drawer,Java,Android,Android Layout,Android Fragments,Navigation Drawer,我对android开发相当陌生。我正在检查material design库,我已经实现了一个导航抽屉,带有底部导航,可以轻松地在片段中导航。这两个组件都工作得很好,但我不知道如何使用这两个组件协调导航。例如,当在导航抽屉上切换片段时,它会更改布局,但按钮导航选定项不会随之更改 如何解决此问题,并将这两个组件链接起来,以便彼此协作并同步已更改的选定项 这就是我的java文件的样子,下面是GitHub上整个项目的链接: 先谢谢你 public class MainActivity extends
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private DrawerLayout drawer;
private TextView appBarTV;
private static final String TAG = "MyActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent= new Intent(this,IntroActivity.class);
startActivity(intent);
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
appBarTV = findViewById(R.id.appbar_text_view);
ImageButton menuRight = findViewById(R.id.leftRight);
menuRight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
drawer.openDrawer(GravityCompat.START);
}
}
});
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
BottomNavigationView bottomNavigationView = (BottomNavigationView)findViewById(R.id.navigation);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment selectedFragment = null;
switch (item.getItemId()) {
case R.id.action_item1:
selectedFragment = MainFragment.newInstance();
break;
case R.id.action_item2:
selectedFragment = AccountFragment.newInstance();
break;
case R.id.action_item3:
selectedFragment = SellFragment.newInstance();
break;
case R.id.action_item4:
selectedFragment = ChatFragment.newInstance();
break;
case R.id.action_item5:
selectedFragment = NotificationFragment.newInstance();
break;
}
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.f_container, selectedFragment);
transaction.commit();
return true;
}
});
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.f_container, MainFragment.newInstance());
transaction.commit();
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onNavigationItemSelected(MenuItem item) {
drawer.closeDrawers();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
int id = item.getItemId();
if (id == R.id.nav_camera) {
MainFragment fragment = new MainFragment();
ft.replace(R.id.f_container, fragment);
ft.commit();
} else if (id == R.id.nav_gallery) {
//appBarTV.setText("Fragment With Tabs");
ChatFragment fragment = new ChatFragment();
ft.replace(R.id.f_container, fragment);
ft.commit();
} else if (id == R.id.nav_slideshow) {
AccountFragment fragmentTab = new AccountFragment();
ft.replace(R.id.f_container, fragmentTab);
ft.commit();
} else if (id == R.id.nav_share) {
Toast.makeText(this, "Partager", Toast.LENGTH_SHORT).show();
} else if (id == R.id.nav_send) {
Toast.makeText(this, "Rate 5 stars", Toast.LENGTH_SHORT).show();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
}
尝试以下代码:
private void setupNavDrawer(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment fragment = null;
switch (item.getItemId()){
case R.id.nav_gallery:
fragment = new GalleryFragment();
break;
case R.id.nav_share:
fragment = new ShareFragment();
break;
default:
fragment = new GalleryFragment();
break;
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
//if checked - set title menu
item.setChecked(true);
setTitle(item.getTitle());
mDrawerLayout.closeDrawers();
return true;
}
});
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
............//nav
setupNavDrawer(navigationView);
}
首先,当用户从底部导航选择选项卡时,应该避免重新创建片段。您应该将片段保留为私有变量:
private DrawerLayout drawer;
private BottomNavigationView bottomNavigationView;
private MainFragment mainFragment = MainFragment.newInstance();
private AccountFragment accountFragment = AccountFragment.newInstance();
private SellFragment sellFragment = SellFragment.newInstance();
private ChatFragment chatFragment = ChatFragment.newInstance();
private NotificationFragment notificationFragment = NotificationFragment.newInstance();
当用户选择一个选项卡时,只需切换到该片段:
bottomNavigationView.setOnNavigationItemSelectedListener(item -> {
Fragment selectedFragment = null;
switch (item.getItemId()) {
case R.id.action_announces:
selectedFragment = mainFragment;
break;
case R.id.action_account:
selectedFragment = accountFragment;
break;
case R.id.action_sell:
selectedFragment = sellFragment;
break;
case R.id.action_chat:
selectedFragment = chatFragment;
break;
case R.id.action_notifications:
selectedFragment = notificationFragment;
break;
}
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if (selectedFragment != null) {
transaction.replace(R.id.f_container, selectedFragment);
transaction.commit();
}
return true;
});
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
drawer.closeDrawers();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
switch (item.getItemId()) {
case R.id.nav_announces:
bottomNavigationView.setSelectedItemId(R.id.action_announces);
ft.replace(R.id.f_container, mainFragment);
break;
case R.id.nav_account:
bottomNavigationView.setSelectedItemId(R.id.action_account);
ft.replace(R.id.f_container, accountFragment);
break;
case R.id.nav_sell:
bottomNavigationView.setSelectedItemId(R.id.action_sell);
ft.replace(R.id.f_container, sellFragment);
break;
case R.id.nav_chat:
bottomNavigationView.setSelectedItemId(R.id.action_chat);
ft.replace(R.id.f_container, chatFragment);
break;
case R.id.nav_notifications:
bottomNavigationView.setSelectedItemId(R.id.action_notifications);
ft.replace(R.id.f_container, notificationFragment);
break;
}
ft.commit();
return true;
}
当用户使用导航菜单选择选项卡时,切换到所需片段:
bottomNavigationView.setOnNavigationItemSelectedListener(item -> {
Fragment selectedFragment = null;
switch (item.getItemId()) {
case R.id.action_announces:
selectedFragment = mainFragment;
break;
case R.id.action_account:
selectedFragment = accountFragment;
break;
case R.id.action_sell:
selectedFragment = sellFragment;
break;
case R.id.action_chat:
selectedFragment = chatFragment;
break;
case R.id.action_notifications:
selectedFragment = notificationFragment;
break;
}
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if (selectedFragment != null) {
transaction.replace(R.id.f_container, selectedFragment);
transaction.commit();
}
return true;
});
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
drawer.closeDrawers();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
switch (item.getItemId()) {
case R.id.nav_announces:
bottomNavigationView.setSelectedItemId(R.id.action_announces);
ft.replace(R.id.f_container, mainFragment);
break;
case R.id.nav_account:
bottomNavigationView.setSelectedItemId(R.id.action_account);
ft.replace(R.id.f_container, accountFragment);
break;
case R.id.nav_sell:
bottomNavigationView.setSelectedItemId(R.id.action_sell);
ft.replace(R.id.f_container, sellFragment);
break;
case R.id.nav_chat:
bottomNavigationView.setSelectedItemId(R.id.action_chat);
ft.replace(R.id.f_container, chatFragment);
break;
case R.id.nav_notifications:
bottomNavigationView.setSelectedItemId(R.id.action_notifications);
ft.replace(R.id.f_container, notificationFragment);
break;
}
ft.commit();
return true;
}
我已经将您的回购分叉,并将其迁移到AndroidX,然后将其安装到名为AndroidX的新分支上。我向你提出拉车的要求。您可以接受并尝试。您检查了我的解决方案了吗?这是一个很好的解决方案,谢谢,而且迁移到androidX对于我下一步要做的事情也很好谢谢