Android 如何在单击导航抽屉的菜单项时打开选项卡布局中的特定选项卡?
事实上,我是Android新手,被困在导航抽屉里。。 我已经成功地设计了导航抽屉及其菜单项。 但当我点击菜单时,它会打开一个独立的片段,而我希望它在选项卡布局中的特定选项卡中打开它 我用自定义适配器制作了单独的选项卡布局。xml文件如下所示Android 如何在单击导航抽屉的菜单项时打开选项卡布局中的特定选项卡?,android,android-fragments,navigation-drawer,android-navigationview,Android,Android Fragments,Navigation Drawer,Android Navigationview,事实上,我是Android新手,被困在导航抽屉里。。 我已经成功地设计了导航抽屉及其菜单项。 但当我点击菜单时,它会打开一个独立的片段,而我希望它在选项卡布局中的特定选项卡中打开它 我用自定义适配器制作了单独的选项卡布局。xml文件如下所示 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="wrap_content">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
app:tabGravity="fill"
app:tabMode="fixed"
app:elevation="0dp"
android:background="#6ec6c5"
app:tabIndicatorColor="#000000"
app:tabSelectedTextColor="@color/textColor"
app:tabTextColor="#A8DCDC"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize">
</android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
</LinearLayout>
我的SplitviewActivity如下所示:
public class SplitViewActivity extends AppCompatActivity {
private DrawerLayout mDrawerLayout;
private NavigationView navigationView;
FragmentManager mFragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_split_view);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.menu);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
navigationView = (NavigationView) findViewById(R.id.navigation_view);
getSupportFragmentManager().beginTransaction().replace(R.id.frame_container, new TabFragment()).commit();
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
menuItem.setChecked(true);
mDrawerLayout.closeDrawers();
switch (menuItem.getItemId()) {
case R.id.navigation_item_products:
getSupportFragmentManager().beginTransaction().replace(R.id.frame_container, new TabFragment()).commit();
Toast.makeText(SplitViewActivity.this, "Navigation Sub Item 01 Clicked", Toast.LENGTH_SHORT).show();
// updateDisplay(new AttachmentFragment());
break;
case R.id.navigation_item_new_Releases:
getSupportFragmentManager().beginTransaction().replace(R.id.frame_container, new ProductFragment()).commit();
/* FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frame_container,new ProductFragment()).commit();*/
Toast.makeText(SplitViewActivity.this, "Navigation Sub Item 01 Clicked", Toast.LENGTH_SHORT).show();
// updateDisplay(new ImageFragment());
break;
case R.id.navigation_item_favorites:
getSupportFragmentManager().beginTransaction().replace(R.id.frame_container, new TabFragment()).commit();
Toast.makeText(SplitViewActivity.this, "Navigation Sub Item 01 Clicked", Toast.LENGTH_SHORT).show();
// updateDisplay(new MyLocationFragment());
break;
case R.id.navigation_item_about_us:
Toast.makeText(SplitViewActivity.this, "Navigation Sub Item 01 Clicked", Toast.LENGTH_SHORT).show();
// updateDisplay(new MyLocationFragment());
break;
case R.id.navigation_item_notification:
Toast.makeText(SplitViewActivity.this, "Navigation Sub Item 01 Clicked", Toast.LENGTH_SHORT).show();
// updateDisplay(new MyLocationFragment());
break;
case R.id.navigation_sub_item_01:
Toast.makeText(SplitViewActivity.this, "Navigation Sub Item 01 Clicked", Toast.LENGTH_SHORT).show();
break;
case R.id.navigation_sub_item_02:
Toast.makeText(SplitViewActivity.this, "Navigation Sub Item 02 Clicked", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_splash_screen, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case android.R.id.home:
mDrawerLayout.openDrawer(GravityCompat.START);
return true;
case R.id.action_settings:
return true;
}
return super.onOptionsItemSelected(item);
}
}
我的导航菜单项.xml文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
除此之外,一切正常。所有三个选项卡都已显示。导航抽屉也工作正常
我唯一不明白的是,我怎么能在点击导航菜单项的选项卡上打开一个片段。目前当我点击菜单项时,它在选项卡中打开一个独立的片段。我如何实现这一点..任何帮助都将在advanced中得到感谢..只需检查抽屉
onClick
单击的位置,并对照每个viewpager
选项卡检查您想要的选项卡,并使用viewpager.setCurrentItem(posiion)
导航到该选项卡
public void setStartTab(String topTab) {
LocalLog.e("TOPTAB",topTab+"");
if(topTab==null){
mViewPager.setCurrentItem(0);
}else{
for(int i=0;i<mTabs.size();i++){
LocalLog.e("TOPTAB",mTabs.get(i).name);
if(mTabs.get(i).name.equalsIgnoreCase(topTab)){
LocalLog.e("TOPTAB",i+"true");
mViewPager.setCurrentItem(i);
}
}
}
}
public void setStartTab(字符串topTab){
LocalLog.e(“TOPTAB”,TOPTAB+”);
if(topTab==null){
mViewPager.setCurrentItem(0);
}否则{
对于(int i=0;i
activity_main.xml
主要活动
public类MainActivity扩展了AppCompatActivity{
专用工具栏;
私人摊位摊位;
私人视页机视页机;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar=(toolbar)findviewbyd(R.id.toolbar);
设置支持操作栏(工具栏);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
viewPager=(viewPager)findViewById(R.id.viewPager);
设置viewPager(viewPager);
tabLayout=(tabLayout)findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
}
专用无效设置ViewPager(ViewPager ViewPager){
ViewPagerAdapter适配器=新的ViewPagerAdapter(getSupportFragmentManager());
addFragment(新的OneFragment(),“一”);
addFragment(新的TwoFragment(),“TWO”);
addFragment(新的ThreeFragment(),“THREE”);
viewPager.setAdapter(适配器);
}
类ViewPagerAdapter扩展了FragmentPagerAdapter{
私有最终列表MFFragmentList=new ArrayList();
私有最终列表MFFragmentTitleList=new ArrayList();
公共视图页面编辑器(碎片管理器){
高级经理;
}
@凌驾
公共片段getItem(int位置){
返回MFFragmentList.get(位置);
}
@凌驾
public int getCount(){
返回MFFragmentList.size();
}
public void addFragment(片段片段,字符串标题){
添加(片段);
MFFragmentTitleList.add(标题);
}
@凌驾
公共字符序列getPageTitle(int位置){
返回MFFragmentTitleList.get(位置);
}
}
}
它对我有用只需单击单击的位置,并对照每个viewpager选项卡检查您想要的选项卡,然后使用viewpager.setCurrentItem(位置)要做到这一点,任何人都能解决我的问题吗?PLZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZtCurrentItem(posiItem),因为我有单独的Tabfragment类和SplitViewActivity,而打开Tabfragment类中已启动的片段的适配器类取决于您如何实现它。它仍然不起作用。实际上,我设法获取导航菜单项的位置。但传入mviewPage.setCurrentItem(0);但仍无法在选项卡中打开该片段..让我们。
<group android:checkableBehavior="single">
<item
android:id="@+id/navigation_item_products"
android:checked="true"
android:title="Products" />
<item
android:id="@+id/navigation_item_new_Releases"
android:title="New Releases" />
<item
android:id="@+id/navigation_item_favorites"
android:title="favorites" />
<item
android:id="@+id/navigation_item_about_us"
android:title="About Us" />
<item
android:id="@+id/navigation_item_notification"
android:title="Notifications" />
</group>
<item android:title="">
<menu>
<item
android:id="@+id/navigation_sub_item_01"
android:title="Configure" />
<item
android:id="@+id/navigation_sub_item_02"
android:title="Logout" />
</menu>
</item>
public void setStartTab(String topTab) {
LocalLog.e("TOPTAB",topTab+"");
if(topTab==null){
mViewPager.setCurrentItem(0);
}else{
for(int i=0;i<mTabs.size();i++){
LocalLog.e("TOPTAB",mTabs.get(i).name);
if(mTabs.get(i).name.equalsIgnoreCase(topTab)){
LocalLog.e("TOPTAB",i+"true");
mViewPager.setCurrentItem(i);
}
}
}
}
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
public class MainActivity extends AppCompatActivity {
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new OneFragment(), "ONE");
adapter.addFragment(new TwoFragment(), "TWO");
adapter.addFragment(new ThreeFragment(), "THREE");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
}