简体   繁体   English

为什么当点击它的项目时,adnroidx recycler-view 点击不起作用?

[英]Why adnroidx recycler-view click not working when click it's item?

I'm trying to implement RecyclerView onclick listener, but it is not working.我正在尝试实现RecyclerView onclick 侦听器,但它不起作用。 I've tried a lot, and try to implement other way too, but not working at all.我尝试了很多,也尝试以其他方式实现,但根本不起作用。

My Main Class:我的主要课程:

public class MainMenuDashboard extends AppCompatActivity{

    private RecyclerView recyclerMenu;
    private RecyclerViewMenuAdapter menuAdapter;

    private Call<CategoryModel> categoryModelCall;
    private TokenManager tokenManagerMainMenu;
    private ApiService serviceMainMenu;
    List<CategoryModel.Subset> menuList;

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

        tokenManagerMainMenu = TokenManager.getInstance(getSharedPreferences("prefs", MODE_PRIVATE));
        serviceMainMenu = RetrofitBuilder.createServiceWithAuth(ApiService.class, tokenManagerMainMenu);

        recyclerMenu = findViewById(R.id.recyclerMenu);

        menuList  = new ArrayList<>();
        GridLayoutManager layoutManager = new GridLayoutManager(MainMenuDashboard.this, 2, GridLayoutManager.VERTICAL, false);
        recyclerMenu.setLayoutManager(layoutManager);

        menuAdapter = new RecyclerViewMenuAdapter(menuList);
        recyclerMenu.setAdapter(menuAdapter);
        menuAdapter.notifyDataSetChanged();

        mainMenuDashBoardToolbar = findViewById(R.id.mainMenuDashBoardToolbar);
        setSupportActionBar(mainMenuDashBoardToolbar);

        menuContent();      
    }

    private void menuContent() {

        categoryModelCall = serviceMainMenu.menuContent(incomingRoleId, true);

        categoryModelCall.enqueue(new Callback<CategoryModel>() {
            @Override
            public void onResponse(@NotNull Call<CategoryModel> call, @NotNull Response<CategoryModel> response) {
                if (response.isSuccessful() && response.body() != null && response.code() != 400) {
                    //findViewById(R.id.shimmerCategory).setVisibility(View.GONE);
                    CategoryModel categoryModel = response.body();
                    menuList = categoryModel.getSubset();
                    menuAdapter = new RecyclerViewMenuAdapter(menuList);
                    recyclerMenu.setAdapter(menuAdapter);
                    //menuAdapter.notifyDataSetChanged();
                    menuAdapter.setOnItemClickListener(new RecyclerViewMenuAdapter.ClickListenerMenu() {
                        @Override
                        public void onClick(int position) {

                            Toast.makeText(MainMenuDashboard.this, "Position "+position+" Clicked", Toast.LENGTH_SHORT).show();
                            menuAdapter.notifyDataSetChanged();
                        }
                    });
                    menuAdapter.notifyDataSetChanged();

                }else {

                    if (response.code() == 401) {
                        Intent i = new Intent(MainMenuDashboard.this, MainActivity.class);
                        i.putExtra("USER_SESSION", true);
                        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                        tokenManagerMainMenu.deleteToken();
                        startActivity(i);                        
                        finish();
                    }                   
                }
            }

            @Override
            public void onFailure(@NotNull Call<CategoryModel> call, @NotNull Throwable t) {                
            }
        });
    } 
 }

My Adapter:我的适配器:

public class RecyclerViewMenuAdapter extends RecyclerView.Adapter<RecyclerViewMenuAdapter.RecyclerViewHolder> {

    private static final String TAG = "NotesRecyclerAdapter";

    private List<CategoryModel.Subset> subsetsCategories;
    private ClickListenerMenu mClickListener;
    private Context context;


    public RecyclerViewMenuAdapter(List<CategoryModel.Subset> subsetsCategories) {
        this.subsetsCategories = subsetsCategories;

    }

    @NonNull
    @Override
    public RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycler_main_menu_category, parent, false);
        return new RecyclerViewHolder(view, mClickListener);
    }

    @Override
    public void onBindViewHolder(@NonNull final RecyclerViewHolder viewHolder, final int position) {

        String menuCategoryImage = subsetsCategories.get(position).getIcon();
        Picasso.get().load(menuCategoryImage).placeholder(R.drawable.admin).into(viewHolder.menuThumb);

        String menuCategoryName = subsetsCategories.get(position).getName();
        viewHolder.menuName.setText(menuCategoryName);

        //Item click
        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view)
            {
                mClickListener.onClick(position);
                //Toast.makeText(context, "Position "+position+" Clicked", Toast.LENGTH_SHORT).show();
                notifyDataSetChanged();
            }
        });

    }

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

    public static class RecyclerViewHolder extends RecyclerView.ViewHolder{

        ImageView menuThumb;
        TextView menuName;
        private ClickListenerMenu mListener;
        //ClickListenerMenu clickListenerMenu;

        public RecyclerViewHolder(View view, ClickListenerMenu clickListenerMenu) {
            super(view);
            menuThumb = view.findViewById(R.id.menuThumb);
            menuName = view.findViewById(R.id.menuName);
            mListener = clickListenerMenu;

        }
    }

    public void setOnItemClickListener(ClickListenerMenu clickListener) {
        mClickListener = clickListener;
    }

    public interface ClickListenerMenu {
        void onClick(int position);
    }
}

I still can't find where I did wrong!!我还是找不到哪里做错了!! Any insight will be very appreciated任何见解将不胜感激

Thank You谢谢你

Add item click listener in your adapter.在您的适配器中添加项目单击侦听器。

@Override
public void onBindViewHolder(@NonNull RecyclerViewHolder viewHolder, int position) {

    String menuCategoryImage = subsetsCategories.get(position).getIcon();
    Picasso.get().load(menuCategoryImage).placeholder(R.drawable.admin).into(viewHolder.menuThumb);

    String menuCategoryName = subsetsCategories.get(position).getName();
    viewHolder.menuName.setText(menuCategoryName);

    //Item click
    viewHolder.itemView.setOnClickListener(new View.OnClickListener() { 
        @Override
        public void onClick(View view) 
        { 
            // Do something 
        } 
    }); 
}

Initialise your recycler view outside and put this line menuAdapter.notifyDataSetChanged();在外面初始化你的回收器视图并把这一行menuAdapter.notifyDataSetChanged(); where you add data in your list.您在列表中添加数据的位置。

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

    tokenManagerMainMenu = TokenManager.getInstance(getSharedPreferences("prefs", MODE_PRIVATE));
    serviceMainMenu = RetrofitBuilder.createServiceWithAuth(ApiService.class, tokenManagerMainMenu);

    recyclerMenu = findViewById(R.id.recyclerMenu);

    menuList = new List<CategoryModel.Subset>();
    GridLayoutManager layoutManager = new GridLayoutManager(MainMenuDashboard.this, 2, GridLayoutManager.VERTICAL, false);
    recyclerMenu.setLayoutManager(layoutManager);

    menuAdapter = new RecyclerViewMenuAdapter(menuList);
    recyclerMenu.setAdapter(menuAdapter);
    menuAdapter.notifyDataSetChanged();

    menuContent();
}

I hope this can help you!我希望这可以帮助你!

Add these line in the onBindViewHolder() method:在 onBindViewHolder() 方法中添加这些行:

viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
//remove this lines
                            //mClickListener.onClick(position);
                            //notifyDataSetChanged();
//add this
           context.startActivity(new Intent(context,SecondActivity.class))              
                    }
                });

and in your MainMenuDashboard class, initialize your Adapter like this:在您的 MainMenuDashboard 类中,像这样初始化您的适配器:

menuAdapter = new RecyclerViewMenuAdapter(this,menuList);

also change your Adapter constructor like this:还可以像这样更改您的 Adapter 构造函数:

public RecyclerViewMenuAdapter(Context context,List<CategoryModel.Subset> subsetsCategories) {
        this.subsetsCategories = subsetsCategories;
        this.context = context;
}

    ```

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM