单击导航抽屉上的项目时如何解决问题 TabLayouts?
Posted
技术标签:
【中文标题】单击导航抽屉上的项目时如何解决问题 TabLayouts?【英文标题】:How to solved issue TabLayouts when items on navigation drawer is clicked? 【发布时间】:2020-10-18 06:15:09 【问题描述】:我对 android 开发非常陌生,因此,我无法通过其他互联网资源的帮助来解决我的问题。使用 Youtube 视频,我正在设计一个同时使用 NavigationDrawer
和 TabLayout
的应用程序,并且所有 TabLayout
项目和导航抽屉项目都使用片段。我的问题是,当我单击导航抽屉中的项目时,应用程序仍然显示TabLayout
的片段,而不是显示与来自NavigationDrawer
的单击项目相对应的片段。
请帮我解决这个问题。
我在下面包含了代码,甚至还有一张图片.
MAIN_ACTIVITY
在主要活动中,我使用带有一些片段到个人片段的底部导航栏在片段中执行某些操作,例如我在主页片段选项卡中使用的可扩展列表视图。
public class MainActivity extends AppCompatActivity
private DrawerLayout dl;
private ActionBarDrawerToggle t;
private NavigationView nv;
BottomNavigationView bottomNavigationView;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
////////////////////////////////////////////////////
bottomNavigationView = findViewById(R.id.bottom_navigation);
BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener()
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item)
Fragment selectedFragment = null;
switch (item.getItemId())
case R.id.action_home:
selectedFragment = HomeFragment.getInstance();
break;
case R.id.action_hospital:
selectedFragment = HospitalFragment.getInstance();
break;
case R.id.action_shipping:
selectedFragment = ShippingFragment.getInstance();
break;
case R.id.action_notify:
selectedFragment = NotifyFragment.getInstance();
break;
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.main_frame, selectedFragment);
transaction.commit();
return false;
);
setDefaultFragment();
dl = (DrawerLayout) findViewById(R.id.activity_main);
t = new ActionBarDrawerToggle(this, dl, R.string.Open, R.string.Close);
t = new ActionBarDrawerToggle(this, dl, R.string.Open, R.string.Close);
dl.addDrawerListener(t);
t.setDrawerIndicatorEnabled(true);
t.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
nv = (NavigationView) findViewById(R.id.nv);
nv.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener()
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item)
int id = item.getItemId();
switch (id)
case R.id.account:
// Intent intent = new Intent(MainActivity.this,SecondActivity.class);
// startActivity(intent);
Toast.makeText(MainActivity.this, "My Account", Toast.LENGTH_SHORT).show();
break;
case R.id.settings:
Toast.makeText(MainActivity.this, "Settings", Toast.LENGTH_SHORT).show();
break;
case R.id.mycart:
Toast.makeText(MainActivity.this, "My Cart", Toast.LENGTH_SHORT).show();
break;
default:
return true;
return true;
);
@Override
public boolean onOptionsItemSelected(MenuItem item)
if (t.onOptionsItemSelected(item))
return true;
return super.onOptionsItemSelected(item);
private void setDefaultFragment()
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.main_frame, HomeFragment.getInstance());
transaction.commit();
[1]: https://i.stack.imgur.com/p8DKL.png
我在这个主要活动中使用的主要 xml 文件我使用底部导航栏和一些片段到个人片段在片段中做一些事情,比如我在主页片段选项卡中使用的可扩展列表视图。
Main_XML
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
tools:context=".MainActivity">
<androidx.drawerlayout.widget.DrawerLayout
android:id="@+id/activity_main"
android:layout_
android:layout_
android:background="@android:color/holo_green_dark">
<com.google.android.material.navigation.NavigationView
android:layout_
android:layout_
app:menu="@menu/navigation_menu"
android:layout_gravity="start"
app:headerLayout="@layout/nav_header"
android:id="@+id/nv">
</com.google.android.material.navigation.NavigationView>
</androidx.drawerlayout.widget.DrawerLayout>
<FrameLayout
android:id="@+id/main_frame"
android:layout_above="@id/bottom_navigation"
android:layout_
android:layout_/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:layout_
android:layout_
android:id="@+id/bottom_navigation"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:background="@android:color/white"
app:menu="@menu/bottom_menu"/>
</RelativeLayout>`
HomeFragment。
在这个项目中,我创建了 4 个片段,我描述了 3 个选项卡>导航抽屉是滑动的,tablayout 不可见在主要活动中,我使用底部导航栏和一些片段到个人片段来做某事在我在主片段选项卡中使用的可扩展列表视图之类的片段中。
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;
import kk.techbytecare.bottomnavigationview.Adapter.SectionPagerAdapter;
import kk.techbytecare.bottomnavigationview.R;
public class HomeFragment extends Fragment
View myFragment;
ViewPager viewPager;
TabLayout tabLayout;
public HomeFragment()
// Required empty public constructor
public static HomeFragment getInstance()
return new HomeFragment();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
// Inflate the layout for this fragment
myFragment = inflater.inflate(R.layout.fragment_home, container, false);
viewPager = myFragment.findViewById(R.id.viewPager);
tabLayout = myFragment.findViewById(R.id.tabLayout);
return myFragment;
>Call onActivity Create method
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState)
super.onActivityCreated(savedInstanceState);
setUpViewPager(viewPager);
tabLayout.setupWithViewPager(viewPager);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener()
@Override
public void onTabSelected(TabLayout.Tab tab)
@Override
public void onTabUnselected(TabLayout.Tab tab)
@Override
public void onTabReselected(TabLayout.Tab tab)
);
private void setUpViewPager(ViewPager viewPager)
SectionPagerAdapter adapter = new SectionPagerAdapter(getChildFragmentManager());
adapter.addFragment(new FixtureFragment(), "Fixtures");
adapter.addFragment(new LiveFragment(), "Live");
adapter.addFragment(new ResultFragment(),"Result");
viewPager.setAdapter(adapter);
**HomeFragment_XML**
>this is home fragment XML file so the problem is this the navigation drawer is swipe the tablayout is not visible In main activity I'm use bottom navigation bar with some fragment to individuals fragment to do something in the fragment like expandable listview I'm using in the home fragment tab .
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:id="@+id/rela"
tools:context=".Fragment.HomeFragment">
<LinearLayout
android:orientation="vertical"
android:layout_
android:layout_>
<TextView
android:layout_margin="20dp"
android:layout_
android:layout_
android:text="Home Fragment"
android:textAlignment="center"
android:textSize="30sp" />
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_
android:layout_
android:background="@android:color/white">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_
android:layout_>
</com.google.android.material.tabs.TabLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_
android:layout_/>
</LinearLayout>
</RelativeLayout>
在这个项目中,我使用的是 androidx 依赖项 在主要活动中,我使用带有一些片段到个人片段的底部导航栏在片段中执行某些操作,例如我在主页片段选项卡中使用的可扩展列表视图。
【问题讨论】:
您好,您只是在显示 Toast 消息,当您从抽屉中点击物品时..您没有进行任何片段交易..检查nv.setNavigationItemSelectedListener
的代码
检查我的图像。我的应用程序运行良好,但没有显示错误。 @Zain
发布您的布局
现在检查@GabrieleMariotti
【参考方案1】:
您的问题在这里:
<androidx.drawerlayout.widget.DrawerLayout
.....>
<com.google.android.material.navigation.NavigationView
android:layout_gravity="start"
../>
</androidx.drawerlayout.widget.DrawerLayout>
<FrameLayout
.../>
改为:
<androidx.drawerlayout.widget.DrawerLayout
.....>
<!-- Main Content -->
<FrameLayout
.../>
<com.google.android.material.navigation.NavigationView
android:layout_gravity="start"
../>
</androidx.drawerlayout.widget.DrawerLayout>
【讨论】:
以上是关于单击导航抽屉上的项目时如何解决问题 TabLayouts?的主要内容,如果未能解决你的问题,请参考以下文章