在Android中,当屏幕旋转时,Activity会被销毁并重新创建,这可能导致列表项不可见。为了解决这个问题,可以通过以下几种方式来保持列表项的可见性:
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
public class MyViewModel extends ViewModel {
private MutableLiveData> itemsLiveData = new MutableLiveData<>();
public void setItems(List- items) {
itemsLiveData.setValue(items);
}
public LiveData
> getItems() {
return itemsLiveData;
}
}
// 在Activity中使用ViewModel
MyViewModel viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
viewModel.getItems().observe(this, new Observer>() {
@Override
public void onChanged(List- items) {
adapter.setItems(items);
}
});
public class MyFragment extends Fragment {
private List- items;
private MyAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_my, container, false);
RecyclerView recyclerView = view.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
adapter = new MyAdapter(items);
recyclerView.setAdapter(adapter);
return view;
}
public void setItems(List
- items) {
this.items = items;
if (adapter != null) {
adapter.setItems(items);
}
}
}
// 在Activity中使用Fragment
FragmentManager fragmentManager = getSupportFragmentManager();
MyFragment fragment = (MyFragment) fragmentManager.findFragmentByTag("myFragment");
if (fragment == null) {
fragment = new MyFragment();
fragmentManager.beginTransaction().add(R.id.container, fragment, "myFragment").commit();
}
fragment.setItems(items);
以上是三种常见的解决方法,你可以根据你的需求选择其中一种或结合使用。