Android 如何在RecyclerView项单击上实现两个OnClickListener?
我很困惑,因为我需要使用两个OnClickListener来满足两种不同的需求。 我有一个Recyclerview,一旦他的任何项目被按下,都需要更改,我已经使用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类中添加了一个接口。问题是,现在我一点击,由于界面(我猜)什么也没发生 我知道理解我的情况可能有点复杂,所以我添加了以下代码来帮助解决这个问题
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();
}
});