通过刷新(或不刷新)片段来实现动态滚动视图



我想创建一个UI,其中n数量的LinearLayout都包含在垂直ScrollView中(每行将包含几个项目)。

我还希望这个 ScrollView 在另一个片段更新值(通过ViewModel共享)时更新。 示例:ScrollView 最初呈现 4 个项目,后来用户在另一个片段中将值更改为 5。 观察者将通知我们的第一个片段,并添加第 5 个布局。

最好的方法是什么? 我是否需要基本上删除片段,并强制刷新(使用要渲染的新布局数量)? 或者有没有办法添加/删除这样的布局而无需刷新片段?

需要考虑的其他注意事项:

用户可以连续多次
  • 更改该值,所以我假设连续多次刷新可能会减慢应用程序的速度?在这种情况下,我总是可以等到用户完成并向后滑动(见下文)以更新片段 1 中的值。

  • 这两个片段也位于选项卡视图中,因此一次只能看到一个片段。 但是,当他们再次滑动到第一个选项卡时,更改需要存在。

片段1(到目前为止我的想法)

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyViewModel viewModel = ViewModelProviders.of(Objects.requireNonNull(getActivity())).get(MyViewModel.class);
n = viewModel.getN().getValue();
viewModel.getN().observe(this, this::updateN);
}
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
ScrollView scrollView = view.findViewById(R.id.scrollView);
for (int i = 0; i < n; i++) {
// For now, just show the index of the layout
LinearLayout linearLayout = new LinearLayout(this.getContext());
TextView textView = new TextView(this.getContext());
textView.setText(String.format("%01d", i);
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
linearLayout.addView(textView);
}
}
private void updateN(int n) {
this.n = n;
// TODO: update UI here?
}

感谢您@dotGitignore的建议。 他建议我查看安卓小部件RecyclerView。 这个小部件可以很好地完成我上面的意思:创建一个列表,以响应和更新对另一个片段中值的更改。

为此(指南链接的波纹管中的步骤):

  1. 将回收商视图支持库添加到 gradle 构建文件

  2. 定义要用作数据源的模型类。 我使用ViewModel类进行片段到片段的访问。有关ViewModel的更多信息,请点击此处

  3. 将回收器视图添加到您的活动以显示项目

  4. 创建自定义行布局 XML 文件以可视化项目

  5. 创建 RecyclerView.Adapter 和 ViewHolder 以呈现该项

  6. 将适配器绑定到数据源以填充回收器视图

所有这些步骤也可以在以下优秀指南中找到: https://guides.codepath.com/android/using-the-recyclerview

相关内容

  • 没有找到相关文章

最新更新