我想创建一个 UI,其中有n
大量的LinearLayout
' 都包含在一个垂直中ScrollView
(每行将包含几个项目)。
如果另一个片段更新一个值(通过 a 共享ViewModel
),我还希望这个 ScrollView 更新。示例: ScrollView 最初呈现 4 个项目,后来用户在另一个片段中将值更改为 5。Observer 将通知我们的第一个片段,并添加第 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?
}