Android 将选项卡添加到navigationDrawer的片段
所以我知道有很多关于我的问题的答案,但我不知道为什么它不起作用 导航抽屉按预期工作,但我正在努力实现这些选项卡。创建项目时,如果有帮助,我在开始时选择了抽屉活动 谢谢你的帮助 所以,我清理了代码并实现了更新的版本,对于未来的问题,我将发布我所有的代码 这是主要活动Android 将选项卡添加到navigationDrawer的片段,android,android-fragments,android-tabs,Android,Android Fragments,Android Tabs,所以我知道有很多关于我的问题的答案,但我不知道为什么它不起作用 导航抽屉按预期工作,但我正在努力实现这些选项卡。创建项目时,如果有帮助,我在开始时选择了抽屉活动 谢谢你的帮助 所以,我清理了代码并实现了更新的版本,对于未来的问题,我将发布我所有的代码 这是主要活动 package com.example.myapplicationteeeeeeeeeest; import android.os.Bundle; import com.google.android.material.float
package com.example.myapplicationteeeeeeeeeest;
import android.os.Bundle;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import android.view.View;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import com.google.android.material.navigation.NavigationView;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.Menu;
public class MainActivity extends AppCompatActivity {
private AppBarConfiguration mAppBarConfiguration;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
Toolbar toolbar = findViewById( R.id.toolbar );
setSupportActionBar( toolbar );
FloatingActionButton fab = findViewById( R.id.fab );
fab.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make( view, "Replace with your own action", Snackbar.LENGTH_LONG )
.setAction( "Action", null ).show();
}
} );
DrawerLayout drawer = findViewById( R.id.drawer_layout );
NavigationView navigationView = findViewById( R.id.nav_view );
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow,
R.id.nav_tools, R.id.nav_share, R.id.nav_send )
.setDrawerLayout( drawer )
.build();
NavController navController = Navigation.findNavController( this, R.id.nav_host_fragment );
NavigationUI.setupActionBarWithNavController( this, navController, mAppBarConfiguration );
NavigationUI.setupWithNavController( navigationView, navController );
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate( R.menu.main, menu );
return true;
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController( this, R.id.nav_host_fragment );
return NavigationUI.navigateUp( navController, mAppBarConfiguration )
|| super.onSupportNavigateUp();
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 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:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.drawerlayout.widget.DrawerLayout>
主要活动的布局
package com.example.myapplicationteeeeeeeeeest;
import android.os.Bundle;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import android.view.View;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import com.google.android.material.navigation.NavigationView;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.Menu;
public class MainActivity extends AppCompatActivity {
private AppBarConfiguration mAppBarConfiguration;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );
Toolbar toolbar = findViewById( R.id.toolbar );
setSupportActionBar( toolbar );
FloatingActionButton fab = findViewById( R.id.fab );
fab.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make( view, "Replace with your own action", Snackbar.LENGTH_LONG )
.setAction( "Action", null ).show();
}
} );
DrawerLayout drawer = findViewById( R.id.drawer_layout );
NavigationView navigationView = findViewById( R.id.nav_view );
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow,
R.id.nav_tools, R.id.nav_share, R.id.nav_send )
.setDrawerLayout( drawer )
.build();
NavController navController = Navigation.findNavController( this, R.id.nav_host_fragment );
NavigationUI.setupActionBarWithNavController( this, navController, mAppBarConfiguration );
NavigationUI.setupWithNavController( navigationView, navController );
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate( R.menu.main, menu );
return true;
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController( this, R.id.nav_host_fragment );
return NavigationUI.navigateUp( navController, mAppBarConfiguration )
|| super.onSupportNavigateUp();
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 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:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.drawerlayout.widget.DrawerLayout>
库片段的布局文件
package com.example.myapplicationteeeeeeeeeest.ui.gallery;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TabHost;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTabHost;
import androidx.lifecycle.ViewModelProviders;
import androidx.viewpager.widget.ViewPager;
import com.example.myapplicationteeeeeeeeeest.MainActivity;
import com.example.myapplicationteeeeeeeeeest.R;
import com.google.android.material.tabs.TabLayout;
public class GalleryFragment extends Fragment {
private GalleryViewModel galleryViewModel;
private ViewPager viewPager;
private TapAdapter tapAdapter;
private TabLayout tabLayout;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
galleryViewModel =
ViewModelProviders.of( this ).get( GalleryViewModel.class );
View root = inflater.inflate( R.layout.fragment_gallery, container, false );
viewPager = (ViewPager) root.findViewById(R.id.viewPager);
tabLayout = (TabLayout) root.findViewById(R.id.tabLayout);
tapAdapter = new TapAdapter( this,getChildFragmentManager() );
tapAdapter.addFragment(new ShoppingListTab(), "Shopping List");
tapAdapter.addFragment(new RecipeTab(), "Receipt List");
viewPager.setAdapter(tapAdapter);
tabLayout.setupWithViewPager(viewPager);
return root;
}
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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.viewpager.widget.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
两个选项卡的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
还有水龙头适配器
package com.example.myapplicationteeeeeeeeeest.ui.gallery;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import java.util.ArrayList;
import java.util.List;
public class TapAdapter extends FragmentStatePagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
TapAdapter(GalleryFragment galleryFragment, FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
}
package com.example.myapplicationteest.ui.gallery;
导入androidx.annotation.Nullable;
导入androidx.fragment.app.fragment;
导入androidx.fragment.app.FragmentManager;
导入androidx.fragment.app.FragmentStatePagerAdapter;
导入java.util.ArrayList;
导入java.util.List;
公共类TapAdapter扩展FragmentStatePagerAdapter{
私有最终列表MFFragmentList=new ArrayList();
私有最终列表MFFragmentTitleList=new ArrayList();
TapAdapter(GalleryFragment GalleryFragment,FragmentManager fm){
超级(fm);
}
@凌驾
公共片段getItem(int位置){
返回MFFragmentList.get(位置);
}
public void addFragment(片段片段,字符串标题){
添加(片段);
MFFragmentTitleList.add(标题);
}
@可空
@凌驾
公共字符序列getPageTitle(int位置){
返回MFFragmentTitleList.get(位置);
}
@凌驾
public int getCount(){
返回MFFragmentList.size();
}
}
我希望我没有错过任何东西不确定,当我打开画廊片段时,我的应用程序不断崩溃,为这个RealTab内容添加了例外,编辑了问题,我试图查看例外情况,但我从来没有一个带有活套和把手的例外情况,所以我应该把标签的布局放在图库布局中吗?我更改了布局,但仍然得到一个例外我更改了几次列表,但仍然得到错误,我真的不知道出了什么问题,但我真的很想感谢你到目前为止的帮助