有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将按钮OnClick与RecyclerView in Fragment中的行OnClick分开

我试图用接口分离片段内部的句柄OnClick按钮和OnClick行

到目前为止,我一直在尝试:

内部片段

if (recyclerView.getTag().toString().equals("Grid")) {
            adapter = new RVAdapter(ListOfdataAdapter, getContext(), 
                    RVAdapterChannel.ViewType.GRID_LIST_LAYOUT, new ClickListener() {
                @Override
                public void OnClick(int position, View view) {
                    //THIS ALWAYS RETURN ROW CLICKED
                    if (view.findViewById(R.id.imageLike).getId() == view.getId()){
                        Toast.makeText(getContext(), "IMAGE LIKE CLICKED",Toast.LENGTH_SHORT).show();
                        OpenDialog();
                    }
                    if (view.findViewById(R.id.layoutRelative).getId() == view.getId()){
                        Toast.makeText(getContext(), "ROW CLICKED", Toast.LENGTH_SHORT).show();
                        OpenDatabase();
                    }

                    //THIS MAKES APP CRASH
                    if (view.findViewById(R.id.imageLike).performClick){
                        Toast.makeText(getContext(), "IMAGE LIKE CLICKED",Toast.LENGTH_SHORT).show();
                        OpenDialog();
                    }
                    if (view.findViewById(R.id.layoutRelative).performClick){
                        Toast.makeText(getContext(), "ROW CLICKED", Toast.LENGTH_SHORT).show();
                        OpenDatabase();
                    }
                    // ANOTHER TRY
                }

                @Override
                public void onLongClicked(int position, View view) {
                }
            });

            recyclerView.setAdapter(adapter);
            if (getPreferenceValue().equals("on")) {
                AnimBottomToTop();
            }
        }

目前只有一个符合我的期望,那就是,如果我将if-Else放在适配器中。。但是如果我这样做了,我就无法打开OpenDialog()、OpenDatabase()等。如果只能通过适配器来完成,我如何才能打开OpenDialog();OpenDatabase();等?如果可能的话,我想把它放在片段中,而不是适配器中

内部适配器

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{
        RelativeLayout Container;
        ImageView ImageLike;
        //...//
        private WeakReference<ClickListener> listenerRef;


        public ViewHolder(View itemView, ClickListener listener) {

            super(itemView);

            listenerRef = new WeakReference<>(listener);;
            ImageLike = (ImageView) itemView.findViewById(R.id.imageLike) ;
            //...//

            //itemView.setOnClickListener(this);
            itemView.setOnClickListener(this);
            Container.setOnClickListener(this);
            ImageLike.setOnClickListener(this);
            ImageLike.setOnLongClickListener(this);
        }

        // onClick Listener for view
        @Override
        public void onClick (View view) {
            //THIS WILL RETURN TOAST ON IMAGELIKE CLICK
            if (view.getId() == ImageLike.getId()) {
                Toast.makeText(view.getContext(), "IMAGE LIKE CLICKED = " + String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();
            } //THIS WILL RETURN TOAST ON ROW CLICK
             else {
                Toast.makeText(view.getContext(), "ROW CLICKED = " + String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();
            }
            listenerRef.get().OnClick(getAdapterPosition(), itemView);
        }

        //onLongClickListener for view
        @Override
        public boolean onLongClick(View view) {

            final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
            builder.setTitle("Hello Dialog")
                    .setMessage("LONG CLICK DIALOG WINDOW FOR ICON " + String.valueOf(getAdapterPosition()))
                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    });

            builder.create().show();
            listenerRef.get().onLongClicked(getAdapterPosition(), itemView);
            return true;
        }
    }

我在这里使用这个方法Onclick for each button inside RecyclerView items

从这里开始RecyclerView onClick我认为这不适合我的需要(不是尝试所有答案)

直到现在,我还没有找到符合我需求的答案

如果我的问题难以理解,请原谅。谢谢你的回复


共 (0) 个答案