我的导航抽屉不会用recyclerview、tablayout 和 viewpager 内部片段打开配置文件片段

如何解决我的导航抽屉不会用recyclerview、tablayout 和 viewpager 内部片段打开配置文件片段

全部。我遇到了问题。

我正在尝试制作一个应用程序,其中导航抽屉是导航源。在这个应用程序中,我有一些带有活动的片段。问题是,如果我在应用程序中为自己运行我的配置文件片段(使用 tablayout 和 recyclerview),它就可以工作。 The application when it runs in it's own application.

但是,当我尝试将它添加到应用程序时,它应该是导航抽屉中的一个片段,应用程序可以编译,但是当我单击模拟器中的菜单项时,它崩溃了。

我将添加我目前拥有的代码:

主要活动

import android.view.MenuItem;
import android.view.View;
import android.view.Menu;
import android.content.Intent;

import com.example.sustainably.ui.myprofile.MainActivityProfile;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.navigation.NavigationView;

import androidx.annotation.NonNull;
import androidx.core.view.GravityCompat;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

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);

        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_friends,R.id.nav_messages,R.id.nav_bookmarks,R.id.nav_myprofile,R.id.nav_discoverforums,R.id.nav_settings,R.id.nav_logout)
                .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();
    }


    public boolean onNavigationItemSelected(MenuItem item) {
        NavigationView navigationView = (NavigationView)findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                int id = menuItem.getItemId();
                switch (menuItem.getItemId()) {
                    case R.id.nav_home:
                        // code here
                        break;
                    case R.id.nav_friends:
                        // code here
                        break;
                    case R.id.nav_messages:
                        // code here
                        break;
                    case R.id.nav_bookmarks:
                        // code here
                        break;
                    case R.id.nav_myprofile:
                        Intent intent=new Intent(MainActivity.this,MainActivityProfile.class);
                        startActivity(intent);
                        break;
                    case R.id.nav_discoverforums:
                        //code here
                        break;
                    case R.id.nav_settings:
                        //code here
                        break;
                    case R.id.nav_logout:
                        //code here
                        break;
                }
DrawerLayout drawer = (DrawerLayout)findViewById(R.id.drawer_layout);
                drawer.closeDrawer(GravityCompat.START);
                return true;
            }
        });

        return false;
    }
}

在配置文件片段包中,我有 6 个 java 类:

BookmarkModel.java


    private String Title;
    private int Photo;

    public BookmarkModel() {
    }

    public BookmarkModel(String title,int photo) {
        Title = title;
        Photo = photo;
    }

    // Getter
    public String getTitle() {
        return Title;
    }
    public int getPhoto() {
        return Photo;
    }
    // Setter
    public void setTitle(String title) {
        Title = title;
    }

    public void setPhoto(int photo) {
        Photo = photo;
    }
}

MainActivityProfile.java


import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import androidx.viewpager2.widget.ViewPager2;

import android.os.Bundle;

import com.example.sustainably.R;
import com.google.android.material.tabs.TabLayout;

public class MainActivityProfile extends AppCompatActivity {

    private TabLayout tabLayout;
    private ViewPager viewPager;
    private ViewPagerAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_myprofile);

        tabLayout = (TabLayout) findViewById(R.id.tablayout_id);
        viewPager = (ViewPager) findViewById(R.id.viewpager_id);
        adapter = new ViewPagerAdapter(getSupportFragmentManager());

        // Add Fragment Here

        adapter.AddFragment(new PublicBookmarkFragment(),"Public Bookmarks");
        adapter.AddFragment(new LatestPostsFragment(),"Latest Posts");
        viewPager.setAdapter(adapter);
        tabLayout.setupWithViewPager(viewPager);

        tabLayout.getTabAt(0).setIcon(R.drawable.ic_outline_bookmarks_24);
        tabLayout.getTabAt(1).setIcon(R.drawable.ic_outline_textsms_24);
    }
}

公共书签片段

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.example.sustainably.R;

import java.util.ArrayList;
import java.util.List;

public class PublicBookmarkFragment extends Fragment {

    View v;
    private RecyclerView myrecyclerview;
    private List<BookmarkModel> lstBookmarkModel;

    public PublicBookmarkFragment() {
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.public_bookmarks_fragment,container,false);
        myrecyclerview = (RecyclerView) v.findViewById(R.id.bookmarks_recyclerview);
        RecyclerViewAdapter recyclerAdapter = new RecyclerViewAdapter(getContext(),lstBookmarkModel);
        myrecyclerview.setLayoutManager(new GridLayoutManager(getContext(),2));
        myrecyclerview.setAdapter(recyclerAdapter);
        return v;
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        lstBookmarkModel = new ArrayList<>();
        lstBookmarkModel.add(new BookmarkModel("Salad",R.drawable.annapelzer));
        lstBookmarkModel.add(new BookmarkModel("Pasta",R.drawable.brookelark_1));
        lstBookmarkModel.add(new BookmarkModel("Fruit Salad",R.drawable.brookelark_2));
        lstBookmarkModel.add(new BookmarkModel("Smoothies with fruit",R.drawable.brookelark_3));
        lstBookmarkModel.add(new BookmarkModel("Soup",R.drawable.cala));
        lstBookmarkModel.add(new BookmarkModel("Lobster Salad",R.drawable.davide_cantelli));
        lstBookmarkModel.add(new BookmarkModel("Breakfast Toast with Berries",R.drawable.joseph_gonzales));

    }
}

RecyclerViewAdapter

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.example.sustainably.R;

import java.util.List;

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {

    Context mContext;
    List<BookmarkModel> mData;

    public RecyclerViewAdapter(Context mContext,List<BookmarkModel> mData) {
        this.mContext = mContext;
        this.mData = mData;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {

        View v;
        v = LayoutInflater.from(mContext).inflate(R.layout.item_bookmarks,parent,false);
        MyViewHolder vHolder = new MyViewHolder(v);

        return vHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder,int position) {

        holder.tv_title.setText(mData.get(position).getTitle());
        holder.img.setImageResource(mData.get(position).getPhoto());

    }

    @Override
    public int getItemCount() {
        return mData.size();
    }

    public static class MyViewHolder extends RecyclerView.ViewHolder {

        private TextView tv_title;
        private ImageView img;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);

            tv_title = (TextView) itemView.findViewById(R.id.title_bookmarks);
            img = (ImageView) itemView.findViewById(R.id.img_bookmarks);

        }
    }
}

ViewPagerAdapter

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;

public class ViewPagerAdapter  extends FragmentPagerAdapter {


    private final List<Fragment> lstFragment = new ArrayList<>();
    private final List<String> lstTitles = new ArrayList<>();


    public ViewPagerAdapter(@NonNull FragmentManager fm) {
        super(fm);
    }


    @NonNull
    @Override
    public Fragment getItem(int position) {
        return lstFragment.get(position);
    }

    @Override
    public int getCount() {
        return lstTitles.size();
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return lstTitles.get(position);
    }

    public void AddFragment (Fragment fragment,String title) {

        lstFragment.add(fragment);
        lstTitles.add(title);

    }
}

fragment_myprofile.xml

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/myprofile"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <include
        layout="@layout/profile_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:id="@+id/TabContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/tablayout_id"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabGravity="fill"
            app:tabIconTint="@color/dark_green"
            app:tabIndicatorColor="@color/dark_green"
            app:tabInlineLabel="true"
            app:tabMode="fixed"
            app:tabRippleColor="@color/light_green"
            app:tabSelectedTextColor="@color/dark_green"
            app:tabTextAppearance="@style/TextAppearance.AppCompat.Small"></com.google.android.material.tabs.TabLayout>


        <androidx.viewpager.widget.ViewPager
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/viewpager_id"></androidx.viewpager.widget.ViewPager>
    </LinearLayout>
</LinearLayout>

public_bookmarks_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/bookmarks_recyclerview">
    </androidx.recyclerview.widget.RecyclerView>
</LinearLayout>

item_bookmarks.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:cardUseCompatPadding="true"
    app:cardCornerRadius="8dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/img_bookmarks"
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:src="@mipmap/ic_launcher"
            android:scaleType="centerCrop" />

        <TextView
            android:id="@+id/title_bookmarks"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textColor="@color/dark_green"
            android:padding="5dp"
            android:text="@string/title"
            android:textSize="16sp" />

    </LinearLayout>
</androidx.cardview.widget.CardView>

我是在这里提问的新手,所以如果我错过了您需要的某些信息,或者搞砸了某些事情,请告诉我您需要什么,我也会提供。希望能帮到你。

根据要求进行澄清: 单击菜单时出现 Logcat 错误消息

2021-05-06 15:28:54.971 18053-18053/com.example.sustainably E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.sustainably,PID: 18053
    java.lang.ClassCastException: com.example.sustainably.ui.myprofile.MainActivityProfile cannot be cast to androidx.fragment.app.Fragment
        at androidx.fragment.app.Fragment.instantiate(Fragment.java:548)
        at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
        at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:390)
        at androidx.navigation.fragment.FragmentNavigator.instantiateFragment(FragmentNavigator.java:132)
        at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:162)
        at androidx.navigation.fragment.FragmentNavigator.navigate(FragmentNavigator.java:58)
        at androidx.navigation.NavController.navigate(NavController.java:1066)
        at androidx.navigation.NavController.navigate(NavController.java:944)
        at androidx.navigation.NavController.navigate(NavController.java:877)
        at androidx.navigation.ui.NavigationUI.onNavDestinationSelected(NavigationUI.java:97)
        at androidx.navigation.ui.NavigationUI$3.onNavigationItemSelected(NavigationUI.java:453)
        at com.google.android.material.navigation.NavigationView$1.onMenuItemSelected(NavigationView.java:217)
        at androidx.appcompat.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:834)
        at androidx.appcompat.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:158)
        at androidx.appcompat.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:985)
        at com.google.android.material.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:416)
        at android.view.View.performClick(View.java:7448)
        at android.view.View.performClickInternal(View.java:7425)
        at android.view.View.access$3600(View.java:810)
        at android.view.View$PerformClick.run(View.java:28305)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

mobile_navigation.xml

<?xml version="1.0" encoding="utf-8"?>
<navigation 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/mobile_navigation"
    app:startDestination="@+id/nav_home">

    <fragment
        android:id="@+id/nav_home"
        android:name="com.example.sustainably.ui.home.HomeFragment"
        android:label="@string/menu_home"
        tools:layout="@layout/fragment_home" />

    <fragment
        android:id="@+id/nav_friends"
        android:name="com.example.sustainably.ui.friends.FriendsFragment"
        android:label="@string/menu_friends"
        tools:layout="@layout/fragment_friends" />

    <fragment
        android:id="@+id/nav_bookmarks"
        android:name="com.example.sustainably.ui.bookmarks.BookmarksFragment"
        android:label="@string/menu_bookmarks"
        tools:layout="@layout/fragment_bookmarks" />
    <fragment
        android:id="@+id/nav_myprofile"
        android:name="com.example.sustainably.ui.myprofile.profileRecycle.MyProfileFragment"
        android:label="@string/menu_myprofile"
        tools:layout="@layout/fragment_myprofile" />
    <fragment
        android:id="@+id/nav_discoverforums"
        android:name="com.example.sustainably.ui.discoverforums.DiscoverForumsFragment"
        android:label="@string/menu_discoverforums"
        tools:layout="@layout/fragment_discoverforums" />
    <fragment
        android:id="@+id/nav_messages"
        android:name="com.example.sustainably.ui.messages.MessagesFragment"
        android:label="@string/menu_messages"
        tools:layout="@layout/fragment_messages" />
</navigation>

完整的代码:https://github.com/CabCabz/SustainablyProblem.git

解决方法

建议:

我分析了您的代码,您不应在 mobile_navigation.xml 中使用默认导航抽屉设置。

不带 mobile_navigation.xml 的设置抽屉菜单:https://stackoverflow.com/a/67389269/12660050

解决方案:

1) 当您使用带有 mobile_navigation.xml 的默认抽屉时,您不需要 使用 onNavigationItemSelected() 方法。所以,在做任何事情之前,把它从 您的主要活动

2) 转到 mobile_navigation.xml 文件并将标签名称fragment 更改为 activity用作 MainActivityProfile.java

之前:

 <fragment
    android:id="@+id/nav_myprofile"
    android:name="com.example.sustainably.ui.myprofile.profileRecycle.MyProfileFragment"
    android:label="@string/menu_myprofile"
    tools:layout="@layout/fragment_myprofile" />

之后:

 <activity
    android:id="@+id/nav_myprofile"
    android:name="com.example.sustainably.ui.myprofile.profileRecycle.MyProfileFragment"
    android:label="@string/menu_myprofile"
    tools:layout="@layout/fragment_myprofile" />

只要改变这个就可以解决你的问题!!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-