如何解决.dismiss 后 Android Dialog 不会关闭
我有一个对话框,它有一个包含多个项目的回收者视图,或者可以说“家庭”,当我点击其中一个时,我想关闭那个对话框并打开另一个带有“产品”的另一个回收者视图已单击的系列,在单击最新产品中的其中一个后,它应该关闭该对话框并打开最后一个对话框,您可以在其中编辑产品。 所以它是这样的:
视图中的按钮 --> 带有回收站的家庭对话框 -- 单击项目上的回收站 --> 带有回收站的该家族的产品 -- 单击项目上的回收站 --> 编辑该项目
当我打开 de Families Dialog,然后关闭它并打开 Products 时,它运行良好。 但是,当我从“产品”对话框中单击产品时,即使“编辑产品”顺利打开,该对话框也不会被关闭,我使用的方法与单击“家庭”中的一个项目时相同,但由于某种原因,它仍然不起作用。
我试过了:
dialogProducts.dismiss();
dialogProducts.cancel();
dialogProducts.hide();
dialogProducts.dismiss();在一个新线程上
dialogProducts.dismiss();在 runOnUiThread
....
这是我的代码草图:
addButton.setonClickListener(v -> {
final Dialog dialogFamilias = new Dialog(getActivity());
//shows families Dialog,lstItemsFamilia is the items in the recycler view
mostraFamilias(dialogFamilias,lstItemsFamilia);
RecyclerView recyclerFamilias = dialogFamilias.findViewById(R.id.recyclerAlert);
recyclerFamilias.addOnItemTouchListener(new MyRecycleViewClickListener(getContext(),new MyRecycleViewClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view,int position) {
//this one dismiss works
dialogFamilias.dismiss();
int idFamiliaClicada = lstItemsFamilia.get(position).getId();
final Dialog dialogProducts = new Dialog(getActivity());
mostraProdutos(dialogProducts,lstItemsProducts);
RecyclerView recyclerProducts = dialogProducts .findViewById(R.id.recyclerAlert);
recyclerProducts.addOnItemTouchListener(new MyRecycleViewClickListener(getContext(),new MyRecycleViewClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view,int position) {
// this one doesn't dismiss
dialogProducts.dismiss();
int idProdutoClicado = lstItemsProducts.get(position).getId();
final Dialog dialogSingleProduct = new Dialog(getActivity());
//shows the final dialog to edit the product
mostraEditarProduto(dialogSingleProduct,idProdutoClicado);
}
}));
}
}));
});
MyRecycleViewClickListener 看起来像这样: (它是从 How to click recyclerview items in Activity?)
public class MyRecycleViewClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public interface OnItemClickListener {
public void onItemClick(View view,int position);
}
GestureDetector mGestureDetector;
public MyRecycleViewClickListener(Context context,OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context,new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView view,MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(),e.getY());
if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView,view.getChildAdapterPosition(childView));
}
return false;
}
@Override
public void onTouchEvent(RecyclerView view,MotionEvent motionEvent) {
}
@Override
public void onRequestdisallowInterceptTouchEvent(boolean disallowIntercept) {
}
}
public void mostraFamilias (Dialog dialogFamilias,List<Itemmodel> lstItemsFamilia){
dialogFamilias.requestwindowFeature(Window.FEATURE_NO_TITLE);
dialogFamilias.setContentView(R.layout.selecionador);
dialogFamilias.setCanceledOnTouchOutside(true);
TextView text = (TextView) dialogFamilias.findViewById(R.id.tituloAlert);
text.setText("Selecionar Família");
int width = (int)(getResources().getdisplayMetrics().widthPixels*0.90);
int height = (int)(getResources().getdisplayMetrics().heightPixels*0.90);
dialogFamilias.getwindow().setLayout(width,height);
RecyclerView recyclerFamilias = (RecyclerView) dialogFamilias.findViewById(R.id.recyclerAlert);
RecyclerViewItemsAdapter adapterFamilias = new
RecyclerViewItemsAdapter(getContext(),lstItemsFamilia);
GridLayoutManager manager = new GridLayoutManager(getContext(),3);
recyclerFamilias.setLayoutManager(manager);
recyclerFamilias.addItemdecoration(new SpacesItemdecoration(20));
recyclerFamilias.getRecycledViewPool().setMaxRecycledViews(0,0);
recyclerFamilias.setAdapter(adapterFamilias);
dialogFamilias.show();
}
mostraProdutos 方法类似。
解决方法
将这些线移到外面
final Dialog dialogFamilias = new Dialog(getActivity());
final Dialog dialogProducts = new Dialog(getActivity());
final Dialog dialogSingleProduct = new Dialog(getActivity());
addButton.setOnClickListener(v -> {
...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。