如何在 Android MVP 项目中处理自定义 ArrayAdapter?
How to handle a custom ArrayAdapter in an Android MVP project?
我有一个 Android MVP 项目。我想将任何 Android 引用排除在演示者之外。这样,我可以将 UI 分隔在 Activity/View.
中
Activity
中有一个 ListView
,它在适配器 (MyAdapter
) 中使用自定义 ArrayList
。这使用 MyModel
对象用数据填充 ListView
。
现在,我正在尝试初始化适配器和 ListView
。
通过在 activity 上这样做,我最终会得到类似
的结果
`MyAdapter adapter = new MyAdapter<MyModel>(this, R.layout.list_item, items);`
问题是 Activity
现在可以访问模型并引用了 ArrayList
项,我只想保留在演示者中并从那里管理它.
我无法在 Presenter 上移动设置适配器,因为我必须将上下文从 Activity 共享给 Presenter,设置适配器并将其传递回 Activity。问题在于演示者现在依赖于一个 Android 上下文对象(MVP Android 项目的演示者部分不应该有任何 Android 代码)。
所以问题是在这种情况下我该怎么办?我在哪里以及如何设置 ArrayAdapter?
- 我建议您使用
RecyclerView
而不是 ListView
以获得更好的性能。
- activity可以容纳
RecyclerView
,你应该让演示者从你的模型库中获取你想要的数据等。
在 Presenter 检索到数据后,您应该将新数据通知 Activity,并将其设置到 RecyclerAdapter。
现在,您的 activity 会膨胀所有关于视图的内容,并且演示者是数据和逻辑的中心。
您可以在 Presenter 中保留项目列表,然后在需要设置适配器时将其发送到 Activity。
我认为你可以做到:
合同:
public interface ViewContract {
void setupContentList(ArrayList<MyModel> list);
}
public interface PresenterContract {
void onViewCreated();
}
Activity:
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);
}
}
我有一个 Android MVP 项目。我想将任何 Android 引用排除在演示者之外。这样,我可以将 UI 分隔在 Activity/View.
中Activity
中有一个 ListView
,它在适配器 (MyAdapter
) 中使用自定义 ArrayList
。这使用 MyModel
对象用数据填充 ListView
。
现在,我正在尝试初始化适配器和 ListView
。
通过在 activity 上这样做,我最终会得到类似
的结果`MyAdapter adapter = new MyAdapter<MyModel>(this, R.layout.list_item, items);`
问题是 Activity
现在可以访问模型并引用了 ArrayList
项,我只想保留在演示者中并从那里管理它.
我无法在 Presenter 上移动设置适配器,因为我必须将上下文从 Activity 共享给 Presenter,设置适配器并将其传递回 Activity。问题在于演示者现在依赖于一个 Android 上下文对象(MVP Android 项目的演示者部分不应该有任何 Android 代码)。
所以问题是在这种情况下我该怎么办?我在哪里以及如何设置 ArrayAdapter?
- 我建议您使用
RecyclerView
而不是ListView
以获得更好的性能。 - activity可以容纳
RecyclerView
,你应该让演示者从你的模型库中获取你想要的数据等。 在 Presenter 检索到数据后,您应该将新数据通知 Activity,并将其设置到 RecyclerAdapter。 现在,您的 activity 会膨胀所有关于视图的内容,并且演示者是数据和逻辑的中心。
您可以在 Presenter 中保留项目列表,然后在需要设置适配器时将其发送到 Activity。
我认为你可以做到:
合同:
public interface ViewContract {
void setupContentList(ArrayList<MyModel> list);
}
public interface PresenterContract {
void onViewCreated();
}
Activity:
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);
}
}