RecyclerView ничего не показывает при переходе назад (компонент навигации) - PullRequest
0 голосов
/ 09 июля 2019

Я использую компонент навигации с нижней навигационной панелью в моем приложении.Проблема состояла в том, что я возвращаюсь к пунктам назначения верхнего уровня из дочернего пункта назначения, в программе recyclerView не отображается никаких элементов.

nav_graph_main:

<?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>

mainActivity:

@Override
    protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
            toolbar = findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);

            BottomNavigationView bottomNavigationView = findViewById(R.id.nav_view);
                navController = Navigation.findNavController(this, R.id.nav_host_fragment);

                AppBarConfiguration appBarConfiguration =
                    new AppBarConfiguration.Builder(R.id.navigation_customers, R.id.navigation_stats, R.id.navigation_menus).build();

                NavigationUI.setupWithNavController(toolbar, navController, appBarConfiguration); 
                NavigationUI.setupWithNavController(bottomNavigationView, navController);
    }

адаптер:

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

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

Я использую viewModel в MenusFragment, и при выборе любого элемента открывается FoodsFragment.При возврате назад в окне повторного просмотра MenusFragment отображается пустой элемент.При отладке все функции работают, но утилита просмотра пуста.Где проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...