【发布时间】: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_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.drawerlayout.widget.DrawerLayout
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_green_dark">
<com.google.android.material.navigation.NavigationView
android:layout_width="wrap_content"
android:layout_height="match_parent"
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_width="match_parent"
android:layout_height="match_parent"/>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:layout_width="match_parent"
android:layout_height="wrap_content"
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_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/rela"
tools:context=".Fragment.HomeFragment">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_margin="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Home Fragment"
android:textAlignment="center"
android:textSize="30sp" />
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</com.google.android.material.tabs.TabLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
</RelativeLayout>
在这个项目中,我使用的是 androidx 依赖项 在主要活动中,我使用带有一些片段到个人片段的底部导航栏在片段中执行某些操作,例如我在主页片段选项卡中使用的可扩展列表视图。
【问题讨论】:
-
您好,您只是在显示 Toast 消息,当您从抽屉中点击物品时..您没有进行任何片段交易..检查
nv.setNavigationItemSelectedListener的代码 -
检查我的图像。我的应用程序运行良好,但没有显示错误。 @Zain
-
发布您的布局
-
现在检查@GabrieleMariotti
标签: android navigation uinavigationcontroller navigation-drawer