0

我有一个 Android MVP 项目。我想将任何 Android 引用排除在演示者之外。这样,我可以在 Activity/View 中保持 UI 分离。

其中有一个ListView在适配器Activity中使用自定义( )。这使用对象来填充数据。ArrayListMyAdapterMyModelListView

现在,我正在尝试初始化适配器和ListView.

通过在活动中这样做,我最终会得到类似的东西

`MyAdapter adapter = new MyAdapter<MyModel>(this, R.layout.list_item, items);`

这样做的问题是Activity现在可以访问模型并引用ArrayList我只想保留在演示者中并从那里管理它的项目。

我无法在 Presenter 上设置适配器,因为我必须将 Activity 的上下文共享给演示者,设置适配器并将其传递回 Activity。这样做的问题是,presenter 现在依赖于一个 Android 上下文对象(MVP Android 项目的 Presenter 部分中不应该有任何 Android 代码)。

所以问题是在这种情况下我该怎么办?我在哪里以及如何设置 ArrayAdapter?

4

2 回答 2

1
  1. 我建议你使用RecyclerView而不是ListView为了更好的性能。
  2. Activity 可以容纳RecyclerView,您应该要求 Presenter 从您的模型存储库中获取您想要的数据等。在 Presenter 检索到数据后,您应该通知 Activity 新数据,并将其设置为 RecyclerAdapter。现在,您的活动包含所有关于视图的膨胀,并且演示者是数据和逻辑的中心。
于 2019-05-23T12:27:55.147 回答
1

您可以在 Presenter 中保留项目列表,然后在需要设置适配器时将其发送到 Activity。

我认为你可以这样做:

合同:

public interface ViewContract {
    void setupContentList(ArrayList<MyModel> list);
}

public interface PresenterContract {
    void onViewCreated();
}

活动:

public class MainActivity extends Activity implements ViewContract {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ......
        mListView = findViewById(R.id.listview);
        mPresenter.onViewCreated();
    }

    public void setupContentList(ArrayList<MyModel> list) {
        MyAdapter adapter = new MyAdapter<MyModel>(this, R.layout.list_item, items);
        mListView.setAdapter(adapter);
    }
}

主持人:

public class Presenter implements PresenterContract {

    public Presenter() {
        ArrayList<MyModel> mItems = new ArrayList();
        // Add items to the list
    }

    public void onViewCreated() {
        mView.setupContentList(mItems);
    }
}
于 2019-05-23T12:36:43.930 回答