Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在RecyclerView项单击上实现两个OnClickListener?_Android_Android Recyclerview_Onclicklistener_Android Coordinatorlayout_Android Appbarlayout - Fatal编程技术网

Android 如何在RecyclerView项单击上实现两个OnClickListener?

Android 如何在RecyclerView项单击上实现两个OnClickListener?,android,android-recyclerview,onclicklistener,android-coordinatorlayout,android-appbarlayout,Android,Android Recyclerview,Onclicklistener,Android Coordinatorlayout,Android Appbarlayout,我很困惑,因为我需要使用两个OnClickListener来满足两种不同的需求。 我有一个Recyclerview,一旦他的任何项目被按下,都需要更改,我已经使用OnBindViewHolder.itemView.setOnClickListener成功地实现了这一点 现在,我想要同样的点击来更新我的BottomAppBar,为此,我在ItemHolder类中添加了一个接口。问题是,现在我一点击,由于界面(我猜)什么也没发生 我知道理解我的情况可能有点复杂,所以我添加了以下代码来帮助解决这个问题

我很困惑,因为我需要使用两个OnClickListener来满足两种不同的需求。 我有一个Recyclerview,一旦他的任何项目被按下,都需要更改,我已经使用
OnBindViewHolder.itemView.setOnClickListener成功地实现了这一点

现在,我想要同样的点击来更新我的BottomAppBar,为此,我在ItemHolder类中添加了一个接口。问题是,现在我一点击,由于界面(我猜)什么也没发生

我知道理解我的情况可能有点复杂,所以我添加了以下代码来帮助解决这个问题:

public class MainActivity extends AppCompatActivity implements MultiViewTypeAdapter.IClickListener {
具有以下功能:

 @Override
    public void onItemClick(View view, int position) {
        int type = adapter.getItemViewType(position);
        if (type == 0) {
            bar.setFabAlignmentMode(BottomAppBar.FAB_ALIGNMENT_MODE_END);
            bar.replaceMenu(R.menu.bab_menu_chosen_project);
            fab.setImageDrawable(getDrawable(R.drawable.ic_message_white_24dp));
        }
        else{
            bar.setFabAlignmentMode(BottomAppBar.FAB_ALIGNMENT_MODE_CENTER);
            bar.replaceMenu(R.menu.bab_menu_primary);
            fab.setImageDrawable(getDrawable(R.drawable.ic_reply_black_24dp));
        }

    }
适配器上的接口如下所示:

public interface IClickListener {
        void onItemClick(View view, int position);
    }
我现在在做什么
公共静态类SelectedProjectItemHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
这是:

然而,我想运行的是我正在做的事情

public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int listPosition) {
是:

我希望一次点击就能发生两件事——Recyclerview上的项目将使用我描述的最后一段代码进行更改,MainActivity中的菜单将使用我描述的第一段代码进行更改


感谢帮助!

从RecyclerView.ViewHolder中删除以下代码

@Override
public void onClick(View v) {
    listener.onItemClick(v, getAdapterPosition());
}
并在“itemView”中添加listner事件,点击如下:

((SelectedProjectItemHolder) holder).itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if(listener != null){
                            listener.onItemClick(v, getAdapterPosition());
                        }
                        dataSet.remove(listPosition);
                        dataSet.add(listPosition, unselectedCards.get(listPosition));
                        notifyItemChanged(listPosition);
                    }
                });

您可以使用UIHandler或MainLoop更改底部栏宽度相同(唯一)的单击,您可以使用UIHandler或MainLoop从适配器访问UI。 在OnCreate上:

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 //.....
Handler uiHandle = new Handler(getMainLooper()){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Bundle b = (Bundle) msg.obj;
            int p = b.getInt("position");
            Toast.makeText(MainActivity.this, "Change here your BottomBAR",     Toast.LENGTH_SHORT).show();

        }
    };
…在适配器中

 yourobjectclick.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

           // example: first change color of my object that I have clicked
                ((TextView)v).setTextColor( mContext.getResources().getColor(R.color.blue_100));
                Bundle bundle = new Bundle();
               //i can store the position about click and
                bundle.putInt("position",position);

                Message message = handler.obtainMessage();
                message.obj = bundle;
                // i have access tu User Interface objects from here

           // next change my bottombar sending a message to UI
           handler.sendMessage(message);
                Toast.makeText(mContext, "onClick: su -> "+tvBikeName.getText(), Toast.LENGTH_SHORT).show();
            }
        });

区分两个onClick的逻辑是什么?我的意思是当第一个可行时,下一个可行时?@Mr.AF,这两件事应该一起做,但一件由活动处理,另一件由RV处理
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 //.....
Handler uiHandle = new Handler(getMainLooper()){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Bundle b = (Bundle) msg.obj;
            int p = b.getInt("position");
            Toast.makeText(MainActivity.this, "Change here your BottomBAR",     Toast.LENGTH_SHORT).show();

        }
    };
 yourobjectclick.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

           // example: first change color of my object that I have clicked
                ((TextView)v).setTextColor( mContext.getResources().getColor(R.color.blue_100));
                Bundle bundle = new Bundle();
               //i can store the position about click and
                bundle.putInt("position",position);

                Message message = handler.obtainMessage();
                message.obj = bundle;
                // i have access tu User Interface objects from here

           // next change my bottombar sending a message to UI
           handler.sendMessage(message);
                Toast.makeText(mContext, "onClick: su -> "+tvBikeName.getText(), Toast.LENGTH_SHORT).show();
            }
        });