[英]How to display Toast from AlertDialog?
當用戶單擊保存按鈕時, AlertDialog
出現一個AlertDialog
並要求用戶輸入文件名的文本。
如果用戶在沒有指定名稱的情況下單擊肯定按鈕(“確定”),我想顯示一個要求他們這樣做的吐司,並保持AlertDialog
打開狀態。 但是吐司永遠不會顯示並且對話框關閉。
AlertDialog
的代碼在這里:
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle(R.string.save_game);
alert.setMessage(R.string.request_name);
// Set an EditText view to get user input
final EditText input = new EditText(this);
input.setHint(R.string.untitled);
alert.setView(input);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
if(value != null){
// Do something with value
}
else{
Toast.makeText(context, R.string.no_name_given, Toast.LENGTH_SHORT).show();
}
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Canceled.
}
});
alert.show();
我怎樣才能做到這一點?
謝謝!
Public void showToast() {
Toast.makeText(this, R.string.no_name_given, Toast.LENGTH_SHORT).show();
}
只需調用此方法,而不是在您的代碼中顯示這樣的警告對話框中的 toast。
else {
showToast();
}
要保持打開狀態,請使用此方法
public void forceOpen() {
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle(R.string.save_game);
alert.setMessage(R.string.request_name);
// Set an EditText view to get user input
final EditText input = new EditText(this);
input.setHint(R.string.untitled);
alert.setView(input);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
if(value != null) {
// Do something with value
}
else {
Toast.makeText(context, R.string.no_name_given, Toast.LENGTH_SHORT).show();
}
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Canceled.
}
});
alert.show();
}
只需重新打開它.. 不知道為什么它會關閉,但這會起作用
更改代碼如下:
if(value != null && value.length()>0){
// Do something with value
}else{
Toast.makeText(context, R.string.no_name_given, Toast.LENGTH_SHORT).show();
}
您可以禁用確定按鈕。如果條件成立,則再次啟用按鈕。
public void alert()
{
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.simple, null);
final EditText etText = (EditText) v.findViewById(R.id.etName);
final AlertDialog d = new AlertDialog.Builder(this)
.setView(v)
.setTitle("Warning ..")
.setPositiveButton(android.R.string.ok,
new Dialog.OnClickListener() {
@Override
public void onClick(DialogInterface d, int which)
{
//Do nothing here. We override the onclick
Toast.makeText(getApplicationContext(), "Enter Text", Toast.LENGTH_LONG).show();
}
})
.setNegativeButton(android.R.string.cancel, null)
.create();
d.show();
}
使用 DialogInterface 從 AlertDialog 的 OnClick 方法獲取上下文的一種簡單方法:
((Dialog) dialogInterface).getContext()
在 OnClick() 方法中使用它:
public void onClick(DialogInterface dialogInterface, int which) {
Toast.makeText(((Dialog) dialogInterface).getContext(), "Bla-bla" , Toast.LENGTH_SHORT).show();
}
如果您想從 Dialog 更新 Activity 上的任何內容,此解決方案可能會有所幫助。 例如,顯示來自 Dialog 按鈕單擊的 Toast 消息。
創建監聽器
public interface YesNoClickListner {
public void yesClicked();
public void noClicked();
}
在對話框中傳遞接口
public class FireMissilesDialog extends DialogFragment {
private YesNoClickListner listner;
public FireMissilesDialog(YesNoClickListner listner){
this.listner = listner;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage("This is custom Dialog")
.setPositiveButton("YES", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
listner.yesClicked();
}
})
.setNegativeButton("NO", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
listner.noClicked();
}
});
return builder.create();
}
}
在您的 Activity 中實現偵聽器並覆蓋方法
public class MainActivity extends AppCompatActivity implements YesNoClickListner{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FireMissilesDialog fireMissilesDialog = new FireMissilesDialog(this);
fireMissilesDialog.show(getSupportFragmentManager(),"Dialog");
}
@Override
public void yesClicked() {
Toast.makeText(this, "Yes Clicked", Toast.LENGTH_SHORT).show();
}
@Override
public void noClicked() {
Toast.makeText(this, "No Clicked", Toast.LENGTH_SHORT).show();
}
}
此解決方案可能不是您解決此特定問題所需的完全解決方案。 但這一般有效。 例如,如果您需要在 YES 按鈕上更新您的 Activity 中的 textView,那么只需覆蓋這樣的方法即可。
@Override
public void yesClicked() {
Toast.makeText(this, "Yes Clicked", Toast.LENGTH_SHORT).show();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.