リサイクルビューアプリケーションのクラッシュで同時に2つの項目を選択すると、どのように私はこの問題を解決することができますか?

user8282703:
 public class BrandsAdapter extends RecyclerView.Adapter<BrandsAdapter.ViewHolder> implements Filterable {
        private final OnListFragmentInteractionListener mListener;
        int itemLayout = R.layout.brand_item;
        private List<Brand> mValues;
        private List<Brand> contactListFiltered;
        private LoadImage loadImage;
        Context mcontext;
        public BrandsAdapter(Context context, List<Brand> items, int i, OnListFragmentInteractionListener listener) {
            mValues = items;
            loadImage = LoadImage.getInstance(context);
            contactListFiltered = items;
            mListener = listener;
            if (i == 1) {
                itemLayout = R.layout.brand_item2;
            }

            mcontext = context;
        }

        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(itemLayout, parent, false);
            return new ViewHolder(view);
        }

        @Override
        public void onBindViewHolder(final ViewHolder holder, int position) {
            holder.mItem = contactListFiltered.get(position);
            holder.mNameView.setText(holder.mItem.getBrandname());

            PicassoTrustAll.getInstance(mcontext).load(contactListFiltered.get(position).getBrandimage()).placeholder(R.drawable.progress_animation).into(holder.mLogoView);

            holder.mView.setOnClickListener(v -> {            
                    if (null != mListener) {
                        mListener.onListFragmentInteraction(holder.mItem);
                    }          

            });
        }

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

        @Override
        public Filter getFilter() {
            return new Filter() {
                @Override
                protected FilterResults performFiltering(CharSequence charSequence) {
                    String charString = charSequence.toString();
                    if (charString.isEmpty()) {
                        contactListFiltered = mValues;
                    } else {
                        List<Brand> filteredList = new ArrayList<>();
                        for (Brand row : mValues) {
                            // name match condition. this might differ depending on your requirement
                            // here we are looking for name or phone number match
                            if (row.getBrandname().toLowerCase().contains(charString.toLowerCase())) {
                                filteredList.add(row);
                            }
                        }
                        contactListFiltered = filteredList;
                    }
                    FilterResults filterResults = new FilterResults();
                    filterResults.values = contactListFiltered;
                    return filterResults;
                }

                @Override
                protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                    contactListFiltered = (ArrayList<Brand>) filterResults.values;
                    notifyDataSetChanged();
                }
            };
        }

        public class ViewHolder extends RecyclerView.ViewHolder {
             final View mView;
             final TextView mNameView;
             final ImageView mLogoView;
             final ProgressBar progressBar;
             Brand mItem;

            public ViewHolder(View view) {
                super(view);
                mView = view;
                mNameView =  view.findViewById(R.id.brand_name);
                mLogoView =  view.findViewById(R.id.brand_img);
                progressBar = view.findViewById(R.id.progress_bar);
            }

            @Override
            public String toString() {
                return super.toString() + " '" + mNameView.getText() + "'";
            }
        }
    }

私は同時に2つの項目をクリックしたときにアプリがインターフェイスメソッドを2回呼び出します mListener.onListFragmentInteraction(holder.mItem);

します

findNavController(requireActivity(), R.id.nav_host_support).navigate(R.id.action_brandsFragment_to_devicesFragment, bundle);

スタックトレース

 Process: com.unicomg.proserve, PID: 25752
    java.lang.IllegalArgumentException: navigation destination com.unicomg.proserve:id/action_brandsFragment_to_devicesFragment is unknown to this NavController
        at androidx.navigation.NavController.navigate(NavController.java:789)
        at androidx.navigation.NavController.navigate(NavController.java:730)
        at androidx.navigation.NavController.navigate(NavController.java:716)
        at com.unicomg.proserve.ui.main.fragments.brands.BrandsFragment.lambda$initBrands$4$BrandsFragment(BrandsFragment.java:75)
        at com.unicomg.proserve.ui.main.fragments.brands.-$$Lambda$BrandsFragment$pny4rYwzqdcDuB9NcgZbiyK2Ick.onListFragmentInteraction(Unknown Source:2)
        at com.unicomg.proserve.ui.main.fragments.brands.BrandsAdapter.lambda$onBindViewHolder$0$BrandsAdapter(BrandsAdapter.java:74)
        at com.unicomg.proserve.ui.main.fragments.brands.-$$Lambda$BrandsAdapter$NWl2ZJhVqEGxSaOEOsJQCc9r7Po.onClick(Unknown Source:6)
        at android.view.View.performClick(View.java:6291)
        at android.view.View$PerformClick.run(View.java:24931)
        at android.os.Handler.handleCallback(Handler.java:808)
        at android.os.Handler.dispatchMessage(Handler.java:101)
        at android.os.Looper.loop(Looper.java:166)
        at android.app.ActivityThread.main(ActivityThread.java:7523)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
フアン・クルーズソレル:

ことは最初のタップにそれに切り替えているためDevicesFragment、及び2回目のタップが処理されるときに動作がそのグラフに存在しません。

あなたは、このチェックを追加することができます。

if (navController.currentDestination?.id != R.id.devicesFragment) {
    navController.navigate(R.id.action_brandsFragment_to_devicesFragment)
}

または、この1:

navController.currentDestination?.getAction(R.id.action_brandsFragment_to_devicesFragment)?.let { 
    navController.navigate(R.id.action_brandsFragment_to_devicesFragment)
}

そして、あなたはまた、あなたがしたい場合は、それらの拡張機能を作ることができます

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=13147&siteId=1