Android在低版本时弹出Dialog弹窗会导致RecyclerView刷新数据源 请给出详细解决方案
时间: 2024-02-18 08:59:14 浏览: 146
这个问题的原因是低版本Android系统的Dialog弹窗不会像高版本一样独立于Activity而是依附于Activity,所以会触发RecyclerView的数据刷新。解决方案如下:
1. 在Dialog中设置setOwnerActivity(null),使其与Activity分离,不再依附于Activity。
2. 在Dialog的onCreate方法中设置setCanceledOnTouchOutside(false),防止点击外部Dialog消失。
3. 在Dialog的onDismiss方法中更新RecyclerView的数据源。
示例代码如下:
```java
public class MyDialog extends Dialog {
private RecyclerView mRecyclerView;
private List<String> mData;
public MyDialog(Context context, List<String> data, RecyclerView recyclerView) {
super(context);
mData = data;
mRecyclerView = recyclerView;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setOwnerActivity(null);
setContentView(R.layout.dialog_layout);
setCanceledOnTouchOutside(false);
//其他初始化操作
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
//更新RecyclerView的数据源
mAdapter.notifyDataSetChanged();
}
}
```
需要注意的是,如果Dialog中的数据需要影响到Activity,可以使用接口回调的方式将数据传递给Activity进行处理。
阅读全文