如何解决警报对话框不会在 1 单击中关闭
我有一个回收器视图(我从 this site 复制),其中有一些按钮。 Onclicking 按钮,我想显示一个确认对话框。我按照 this 回答来构建对话框。现在我必须按关闭按钮 4 次才能关闭对话框。 如何修复它以一键关闭对话框。
这是我的适配器代码:
package com.example.sample_app;
import ...
public class delete_server_adapter extends RecyclerView.Adapter<delete_server_adapter.ViewHolder> {
private ArrayList<String> localDataSet;
private Context my_context;
private String selected_server_name;
private String server_key;
/**
* Provide a reference to the type of views that you are using
* (custom ViewHolder).
*/
public static class ViewHolder extends RecyclerView.ViewHolder {
private final Button server_name_button;
public ViewHolder(View view) {
super(view);
// Define click listener for the ViewHolder's View
server_name_button = view.findViewById(R.id.button2);
}
public TextView getTextView() {
return server_name_button;
}
}
/**
* Initialize the dataset of the Adapter.
*
* @param dataSet String[] containing the data to populate views to be used
* by RecyclerView.
*/
public delete_server_adapter(Context context,ArrayList<String> dataSet) {
localDataSet = dataSet;
my_context = context;
}
// Create new views (invoked by the layout manager)
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup,int viewType) {
// Create a new view,which defines the UI of the list item
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.delete_server_button,viewGroup,false);
view.findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
remove(v);
}
});
return new ViewHolder(view);
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder viewHolder,final int position) {
// Get element from your dataset at this position and replace the
// contents of the view with that element
viewHolder.getTextView().setText(localDataSet.toArray()[position].toString());
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return localDataSet.size();
}
private void remove(View v){
selected_server_name = ((Button) v).getText().toString();
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("/server_list");
ChildEventListener server_listener = new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot snapshot,@Nullable String previousChildName) {
for (DataSnapshot child_snapshot: snapshot.getChildren()){
server_key = child_snapshot.getKey();
}
DatabaseReference server = FirebaseDatabase.getInstance().getReference("/server_list"+ server_key);
AlertDialog.Builder builder = new AlertDialog.Builder(my_context);
builder.setCancelable(true);
builder.setTitle("Delete Vault");
builder.setMessage("Are you sure you want to delete this vault? It's data will be lost for ever");
builder.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int which) {
server.removeValue();
}
});
builder.setNegativeButton("No",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int which) {
dialog.dismiss();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
@Override
public void onChildChanged(@NonNull DataSnapshot snapshot,@Nullable String previousChildName) {
}
@Override public void onChildRemoved(@NonNull DataSnapshot snapshot){}
@Override public void onChildMoved(@NonNull DataSnapshot snapshot,@Nullable String previousChildName){}
@Override public void onCancelled(@NonNull DatabaseError error){}
};
databaseReference.addChildEventListener(server_listener);
}
}
我这样称呼这个适配器:
delete_server_adapter adapter = new delete_server_adapter(context,data); //Here context is the context of the parent activty which contains the recyclerview
recyclerView.setAdapter(adapter);
recyclerView.scrollToPosition(0);
解决方法
当我们点击任何按钮是/否时,警报对话框自动关闭
,更改“builder.setCancelable(true);”到“builder.setCancelable(false);”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。