Почему клик adnroidx не работает, когда кликаешь на его предмет? - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь реализовать RecyclerView слушатель onclick, но он не работает. Я много пробовал и пытаюсь реализовать другим способом, но не работаю вообще.

Мой основной класс:

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

Мой Адаптер:

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

Я до сих пор не могу найти, где я ошибся !! Любое понимание будет высоко ценится

Спасибо

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Добавить прослушиватель щелчка элемента в вашем адаптере.

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

Инициализировать ваше представление переработчика снаружи и поместить эту строку menuAdapter.notifyDataSetChanged();, где вы добавляете данные в свой список.

@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 надеюсь, что это может помочь вам!

0 голосов
/ 13 февраля 2020

Добавьте эти строки в метод 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))              
                    }
                });

и в своем классе MainMenuDashboard, инициализируйте ваш адаптер следующим образом:

menuAdapter = new RecyclerViewMenuAdapter(this,menuList);

также измените конструктор адаптера следующим образом :

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

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