Java 返回导航时,RecyclerView不显示任何内容(导航组件)

Java 返回导航时,RecyclerView不显示任何内容(导航组件),java,android,android-architecture-components,Java,Android,Android Architecture Components,我正在应用程序中使用带有底部导航视图的导航组件。问题是,当我从子目的地返回顶级目的地时,recyclerView并没有显示任何元素 导航图主: <?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"

我正在应用程序中使用带有底部导航视图的导航组件。问题是,当我从子目的地返回顶级目的地时,recyclerView并没有显示任何元素

导航图主:

<?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/nav_graph_main"
    app:startDestination="@id/navigation_stats">
    <fragment
        android:id="@id/navigation_stats"
        android:name="com.example.view.fragments.StatsFragment"
        android:label="@string/statistika"
        tools:layout="@layout/fragment_stats" />
    <fragment
        android:id="@+id/navigation_customers"
        android:name="com.example.view.fragments.CustomersFragment"
        android:label="@string/alyjylar"
        tools:layout="@layout/fragment_customers" />
    <fragment
        android:id="@+id/navigation_menus"
        android:name="com.example.view.fragments.MenusFragment"
        android:label="@string/bolumler"
        tools:layout="@layout/fragment_menus">
        <action
            android:id="@+id/action_navigation_menus_to_navigation_foods"
            app:destination="@id/navigation_foods"
            app:launchSingleTop="true"/>
    </fragment>
    <fragment
        android:id="@+id/navigation_foods"
        android:name="com.example.view.fragments.FoodsFragment"
        android:label="@string/menular"
        tools:layout="@layout/fragment_foods">
    </fragment>
</navigation>
适配器:

public class MenusAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private final Context mContext;
    private List<Menus> mList;
    private static final int TYPE_ITEM = 0;
    private static final int TYPE_PROGRESS = 1;
    private View.OnClickListener mOnItemClickListener;

    public MenusAdapter(Context mContext, List<Menus> mList) {
        this.mContext = mContext;
        this.mList = mList;
    }
    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        if (viewType == TYPE_ITEM) {
            View view = LayoutInflater.from(mContext).inflate(R.layout.item_menu, parent, false);
            return new ItemViewHolder(view);
        } else if (viewType == TYPE_PROGRESS) {
            View view = LayoutInflater.from(mContext).inflate(R.layout.item_loading, parent, false);
            return new LoadViewHolder(view);
        }
        throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
    }
    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof ItemViewHolder) {

            final ItemViewHolder itemVH = (ItemViewHolder) holder;
            final Menus data = mList.get(position);

            itemVH.textViewMenuName.setText(data.getName());

            String path = Utils.menu_small + data.getImage();
            Picasso.get().load(path).into(itemVH.imageViewMenu);
        }
    }
    public void setOnItemClickListener(View.OnClickListener itemClickListener) {
        mOnItemClickListener = itemClickListener;
    }
    @Override
    public int getItemCount() {
        return mList.size();
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public int getItemViewType(int position) {
        return mList.get(position) != null ? TYPE_ITEM : TYPE_PROGRESS;
    }
    private class ItemViewHolder extends RecyclerView.ViewHolder {
        TextView textViewMenuName;
        ImageView imageViewMenu;

        ItemViewHolder(View itemView) {
            super(itemView);
            itemView.setTag(this);
            itemView.setOnClickListener(mOnItemClickListener);
            textViewMenuName = itemView.findViewById(R.id.textViewFoodName);
            imageViewMenu = itemView.findViewById(R.id.imageViewFood);
        }

    }
    class LoadViewHolder extends RecyclerView.ViewHolder {
        LoadViewHolder(View v) {
            super(v);
        }
    }
}
public类MenusAdapter扩展了RecyclerView.Adapter{
私有最终上下文mContext;
私人名单;
私有静态最终整数类型\u项=0;
私有静态最终整数类型_PROGRESS=1;
private View.OnClickListener监视器ClickListener;
公共菜单适配器(上下文mContext、列表mList){
this.mContext=mContext;
this.mList=mList;
}
@非空
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
if(viewType==类型\项){
视图=LayoutFlater.from(mContext).充气(R.layout.item_菜单,父项,false);
返回新的ItemViewHolder(视图);
}else if(viewType==类型\进度){
视图=LayoutFlater.from(mContext)。充气(R.layout.item\u加载,父项,false);
返回新的LoadViewHolder(视图);
}
抛出新的RuntimeException(“没有与类型“+viewType+”+匹配的类型,请确保正确使用类型”);
}
@凌驾
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder,int位置){
if(项目视图持有者的持有者实例){
最终ItemViewHolder itemVH=(ItemViewHolder)持有人;
最终菜单数据=列表获取(位置);
itemVH.textViewMenuame.setText(data.getName());
String path=Utils.menu_small+data.getImage();
Picasso.get().load(path).into(itemVH.imageViewMenu);
}
}
public void setOnItemClickListener(View.OnClickListener项ClickListener){
mOnItemClickListener=itemClickListener;
}
@凌驾
public int getItemCount(){
返回mList.size();
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
public int getItemViewType(int位置){
return mList.get(position)!=null?TYPE_项目:TYPE_进度;
}
私有类ItemViewHolder扩展了RecyclerView.ViewHolder{
TextView textViewMenuame;
ImageView ImageView菜单;
ItemViewHolder(查看itemView){
超级(项目视图);
setTag(这个);
setOnClickListener(mOnItemClickListener);
textViewMenuame=itemView.findViewById(R.id.textViewFoodName);
imageViewMenu=itemView.findViewById(R.id.imageViewFood);
}
}
类LoadViewHolder扩展了RecyclerView.ViewHolder{
LoadViewHolder(视图v){
超级(五);
}
}
}
菜单片段:

public class MenusFragment extends Fragment  {
        private RecyclerView recyclerView;
        private ProgressBar progressBar;
        private MenusAdapter mAdapter;
        private List<Menus> mResMenus = new ArrayList<>();
        private MainActivityViewModel mViewModel;
        private View.OnClickListener onItemClickListener = view -> {
            RecyclerView.ViewHolder viewHolder = (RecyclerView.ViewHolder) view.getTag();
            int position = viewHolder.getAdapterPosition();
            if (position != RecyclerView.NO_POSITION) {
                Menus thisItem = mResMenus.get(position);
                Bundle bundle = new Bundle();
                bundle.putInt("menu_id", thisItem.getMenuId());
                Navigation.findNavController(view).navigate(R.id.action_navigation_menus_to_navigation_foods, bundle);
            }
        };
        @Override
        public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
            initialize(view);
            observeData();
        }
        @Override
        public void onResume() {
            super.onResume();
            if (mViewModel != null)
                mViewModel.reloadMenu();
        }
        private void initialize(View view) {
            recyclerView = view.findViewById(R.id.recyclerView);
            mViewModel = ViewModelProviders.of(Objects.requireNonNull(getActivity())).get(MainActivityViewModel.class);

             if (mAdapter == null) {
                mAdapter = new MenusAdapter(getContext(), mResMenus);
                recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
                recyclerView.setAdapter(mAdapter);
                recyclerView.setItemAnimator(new DefaultItemAnimator());
                recyclerView.setNestedScrollingEnabled(true);
                recyclerView.setHasFixedSize(true);
                mAdapter.setOnItemClickListener(onItemClickListener);
            } else {
                mAdapter.notifyDataSetChanged();
            }
        }
        private void observeData() {
            List<Menus> list = new ArrayList<>();
            mViewModel.getMenus().removeObservers(this);
            mViewModel.getMenus().observe(this, response -> {
                if (response != null) {
                    list.addAll(response.getMenus());
                    for (Menus it : list) {
                        if (it.getMenuId() != 0)
                            mResMenus.add(it);
                    }
                    mAdapter.notifyDataSetChanged();
                }
            });
        }
}
public类MenusFragment扩展了Fragment{
私人回收站;
私人ProgressBar ProgressBar;
私人MenusAdapter mAdapter;
private List mResMenus=new ArrayList();
私有维护活动视图模型mViewModel;
private View.OnClickListener onItemClickListener=视图->{
RecyclerView.ViewHolder ViewHolder=(RecyclerView.ViewHolder)view.getTag();
int position=viewHolder.getAdapterPosition();
如果(位置!=RecyclerView.无位置){
菜单thisItem=mResMenus.get(位置);
Bundle=新Bundle();
bundle.putInt(“menu_id”,thisItem.getMenuId());
导航。findNavController(视图)。导航(R.id.action\u Navigation\u menu\u to\u Navigation\u foods,bundle);
}
};
@凌驾
已创建公用void onview(@NonNull视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
初始化(视图);
观察数据();
}
@凌驾
恢复时公开作废(){
super.onResume();
if(mViewModel!=null)
mViewModel.reloadMenu();
}
私有void初始化(视图){
recyclerView=view.findViewById(R.id.recyclerView);
mViewModel=ViewModelProviders.of(Objects.requirennoull(getActivity()).get(MainActivityViewModel.class);
if(mAdapter==null){
mAdapter=newmenusadapter(getContext(),mResMenus);
setLayoutManager(新的LinearLayoutManager(getContext(),LinearLayoutManager.VERTICAL,false));
recyclerView.setAdapter(mAdapter);
setItemAnimator(新的DefaultItemAnimator());
recyclerView.setNestedScrollingEnabled(真);
recyclerView.setHasFixedSize(true);
mAdapter.setOnItemClickListener(onItemClickListener);
}否则{
mAdapter.notifyDataSetChanged();
}
}
观察到的私有无效数据(){
列表=新的ArrayList();
mViewModel.getMenus().removeObservers(此选项);
mViewModel.getMenus()。观察(此,响应->{
if(响应!=null){
list.addAll(response.getMenus());
用于(菜单:列表){
if(it.getMenuId()!=0)
mResMenus.add(it);
}
mAdapter.notifyDataSetChanged();
}
});
}
}

我在MenusFragment中使用viewModel,当选择任何项目时会打开FoodsFragment。返回时,菜单片段的recyclerview显示空项。调试所有功能时,但recyclerview为空。问题出在哪里?

添加您的recyclerview适配器类here@SandeepMalik确定您在活动中的何处设置适配器?@sandepmalik I在MenusFragment中设置适配器。当点击任何一个按钮时
public class MenusFragment extends Fragment  {
        private RecyclerView recyclerView;
        private ProgressBar progressBar;
        private MenusAdapter mAdapter;
        private List<Menus> mResMenus = new ArrayList<>();
        private MainActivityViewModel mViewModel;
        private View.OnClickListener onItemClickListener = view -> {
            RecyclerView.ViewHolder viewHolder = (RecyclerView.ViewHolder) view.getTag();
            int position = viewHolder.getAdapterPosition();
            if (position != RecyclerView.NO_POSITION) {
                Menus thisItem = mResMenus.get(position);
                Bundle bundle = new Bundle();
                bundle.putInt("menu_id", thisItem.getMenuId());
                Navigation.findNavController(view).navigate(R.id.action_navigation_menus_to_navigation_foods, bundle);
            }
        };
        @Override
        public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
            initialize(view);
            observeData();
        }
        @Override
        public void onResume() {
            super.onResume();
            if (mViewModel != null)
                mViewModel.reloadMenu();
        }
        private void initialize(View view) {
            recyclerView = view.findViewById(R.id.recyclerView);
            mViewModel = ViewModelProviders.of(Objects.requireNonNull(getActivity())).get(MainActivityViewModel.class);

             if (mAdapter == null) {
                mAdapter = new MenusAdapter(getContext(), mResMenus);
                recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
                recyclerView.setAdapter(mAdapter);
                recyclerView.setItemAnimator(new DefaultItemAnimator());
                recyclerView.setNestedScrollingEnabled(true);
                recyclerView.setHasFixedSize(true);
                mAdapter.setOnItemClickListener(onItemClickListener);
            } else {
                mAdapter.notifyDataSetChanged();
            }
        }
        private void observeData() {
            List<Menus> list = new ArrayList<>();
            mViewModel.getMenus().removeObservers(this);
            mViewModel.getMenus().observe(this, response -> {
                if (response != null) {
                    list.addAll(response.getMenus());
                    for (Menus it : list) {
                        if (it.getMenuId() != 0)
                            mResMenus.add(it);
                    }
                    mAdapter.notifyDataSetChanged();
                }
            });
        }
}