我有一个简单的AlertDialog显示一些项目的列表,单击其中一个项目后,单击的项目将传递回封闭项目Activity.我还想在用户取消对话框时使用后退按钮执行一些默认处理- 更具体地说,我想在这种情况下将空字符串传递给活动.
但是,如果我将对话框放在DialogFragment(来自兼容包)中,OnCancelListener 则在使用后退按钮关闭对话框时不会调用该对话框.我究竟做错了什么?
public class SelectItemDialog extends DialogFragment {
public interface Callback {
void onItemSelected(String string);
}
private static final String ARG_ITEMS = "items";
private Callback callback;
public static SelectItemDialog fromItems(Collection<String> items) {
SelectItemDialog fragment = new SelectItemDialog();
fragment.setArguments(newArguments(items));
return fragment;
}
private static Bundle newArguments(Collection<String> items) {
Bundle arguments = new Bundle();
arguments.putStringArray(ARG_ITEMS, items.toArray(new String[items.size()]));
return arguments;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
callback …Run Code Online (Sandbox Code Playgroud) 我有一个 AlertDialog,它setCancelable()是假的。在Onbackpressed函数中,我希望关闭 AlertDialog。但是当setCancelable()为 false 时,后退键根本不起作用。我应该怎么做才能摆脱这个问题?我不想改成setCancelable()真,因为我会有另一个问题。
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
lateinit var dialogBuilder: AlertDialog.Builder
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
dialogBuilder = AlertDialog.Builder(this)
dialogBuilder.setMessage("Check your internet connection")
.setPositiveButton("OK") { _, _ ->
Toast.makeText(this, "OK", Toast.LENGTH_LONG).show()
}.setCancelable(false)
.create().show()
}
}
Run Code Online (Sandbox Code Playgroud)