将数据从一个活动传递到另一活动的交互者

时间:2019-06-21 14:22:02

标签: android firebase

我正在开发聊天应用程序。有聊天室,这些房间内有消息。当用户单击聊天室时,我想转到另一个显示消息的活动。

在我的适配器类中,我用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类。我该如何实现?

3 个答案:

答案 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);