我正在开发聊天应用程序。有聊天室,这些房间内有消息。当用户单击聊天室时,我想转到另一个显示消息的活动。
在我的适配器类中,我用onclick()
编写了这个onBindViewHolder
方法,通常在该方法中与所需数据一起使用。像这样:
@Override
public void onBindViewHolder(@NonNull ChatRoomAdapter.ChatRoomViewHolder holder, final int position) {
holder.mRoomTitle.setText(mChatRooms.get(position).getTitle());
holder.mRoomDescription.setText(mChatRooms.get(position).getDescription());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(this, NextActivity.java);
intent.putExtra("test", mChatRooms.get(position).getTitle());
}
});
}
但是我正在尝试MVP架构设计,我想将roomTitle
传递给下一个活动的Interactor / presenter类。我该如何实现?
答案 0 :(得分:1)
在RecyclerView适配器中,您需要在适配器中传递onItemClickListener。
请参阅Google的MVP示例-> https://github.com/googlesamples/android-architecture/tree/todo-mvp/
尤其是在TaskFragment中引用TaskItemListener。他们正在做您想要达到的目标。在此过程中,他们从任务列表(recyclervView)中打开任务详细信息(新活动)。
/**
* Listener for clicks on tasks in the ListView.
*/
TaskItemListener mItemListener = new TaskItemListener() {
@Override
public void onTaskClick(Task clickedTask) {
mPresenter.openTaskDetails(clickedTask);
}
@Override
public void onCompleteTaskClick(Task completedTask) {
mPresenter.completeTask(completedTask);
}
@Override
public void onActivateTaskClick(Task activatedTask) {
mPresenter.activateTask(activatedTask);
}
};
然后将其传递到Recycler视图的适配器
mListAdapter = new TasksAdapter(new ArrayList<Task>(0), mItemListener);
然后在项目上单击
rowView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mItemListener.onTaskClick(task);
}
});
答案 1 :(得分:0)
关注此article,以了解有关MVP的更多信息。
您可以做一件事情,在下一个活动的演示者中创建方法
setRoomTitle(String roomTitle);
只要您单击并发送意图,就可以进入下一个活动调用
mPresenter.setRoomTitle(roomTitle);
有意义吗?因此,您可以在下一个活动的演示者中发送标题或其他数据。
如果您还有其他查询,请告诉我。
谢谢。
快乐编码:)
答案 2 :(得分:0)
适配器仅负责将视图和数据绑定在一起。您的业务逻辑应该进入控制器类,该类是包含RecyclerView的Activity或Fragment。这样,您就可以将其重用于任何其他Activity,并且由于知道逻辑代码在一个地方,因此它也使调试/维护变得更加容易。
但是您如何将两者链接在一起?只需实现回调接口并将其传递给适配器即可。回调接口可能是这样的:
interface OnClickCallback{
void onClick(String title);
}
只需将一个成员变量添加到名为mCallback的适配器类中,并通过适配器构造函数或setter方法影响对其的引用。 您可以使Activity实现此接口并将其本身作为引用传递,也可以在一个对象中实例化它,然后将其传递。
然后就这样写:
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mCallback.onClick(mChatRooms.get(position).getTitle());
}
});
onClick方法应为您的新Activity创建一个意图,并带有一个额外的包含标题的意图。在新的Activity的onCreate方法中,您可以使用以下方法检索标题值:
String title = getIntent().getStringExtra(YOUR_TITLE_KEY_HERE);