我有活动代码,我想在其中添加条件AlertDialog 我对Android开发来说太新了,不知道这个' Regular'代码符合" UI"代码与否,但onCreate()有一行代码:
**setContentView(R.layout.plateform);**
无论如何,我想要' Regular'代码在其执行中等待/暂停,直到用户单击其中一个AlertDialog按钮。
目前,AlertDialog启动正常并显示在屏幕上 但它只在那里停留约2秒钟,然后在没有任何用户输入的情况下消失 然后代码继续,好像AlertDialog永远不存在。
我需要在' Regular'中使用该用户输入。随后的代码。
我怎样才能让它发挥作用?
以下是插入新代码的代码,然后是' Regular'代码:
private void EnterClick() {
EditText plate = (EditText) findViewById(R.id.editTextPlate);
String newString = plate.getText().toString();
// ======= **NEW Code** ==============
if (!newString.equals("")) {
// Check If Plate PAID status should be checked at ClientSite
String UseClientChk = WorkingStorage.GetCharVal(Defines.ClientFlag, getApplicationContext());
// If appropriate, check Plate number @ Client
if (UseClientChk.equals("YES")) {
newString = checkClient(newString);
}
}
// =========================================
// Below here 'regular' code executes fine 'as is'
if (!newString.equals("")) {
// Other 'Regular' code here....
}
新的CheckClient代码:
protected String checkClient(String plate) {
// Make Web Service call to the Client's Website
final String ClientChkVehicleURL = "https://dlskfjdslfkjasdlkfjsdlfk/vehicle/"; // DEVELOPMENT URL
String PlateStatus = "";
String ReturnMessage = "";
ReturnMessage = HTTPFileTransfer.HTTPGetPageContent(ClientChkVehicleURL + plate , getApplicationContext());
try{
ReturnMessage = ReturnMessage.toString();
if (ReturnMessage.length() > 0) {
JSONObject obj = new JSONObject(ReturnMessage);
//String mThisDeviceName = (obj.getString("DeviceId")); // Code Model
}
} catch (JSONException e) {
//Log.d(TAG, "ERROR: " + e, e);
}
if (PlateStatus.equals("PAID")) {
// IF PAID, pop AlertDialog "Continue" or "Abort"
processingAlert = true;
PopIt("ClientSite","PAID at ClientSite");
} else if (PlateStatus.equals("NOTPAID")) {
// IF NOT PAID, AlertDialog "Not Paid at ClientSite"
processingAlert = true;
PopIt("ClientSite","NOT PAID at ClientSite");
} else {
Toast.makeText(getApplicationContext(), "Plate: " + plate.trim() + " Not Found at ClientSite", Toast.LENGTH_LONG).show();
}
return plate;
}
最后是New AlertDialog代码:
以下仅为TEST代码,以确保工作正常。
public void PopIt( String title, String message ){
// Set Flag to Stay In Alert Window
String positiveBtnText = "";
String negativeBtnText = "";
if (! WorkingStorage.GetCharVal(Defines.LanguageType,getApplicationContext()).equals("SPANISH")) {
// ENGLISH
positiveBtnText = "CONTINUE";
negativeBtnText = "ABORT";
} else {
// SPANISH
positiveBtnText = "CONTINUAR";
negativeBtnText = "ANULAR";
}
new AlertDialog.Builder(this)
.setTitle( title)
.setMessage(message)
.setPositiveButton(positiveBtnText, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
//do stuff onclick of POSITIVE
Toast.makeText(getApplicationContext(), "You clicked on POSITIVE", Toast.LENGTH_LONG).show();
processingAlert = false;
}
})
.setNegativeButton(negativeBtnText, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
//do stuff onclick of NEGATIVE
Toast.makeText(getApplicationContext(), "You clicked on NEGATIVE", Toast.LENGTH_LONG).show();
processingAlert = false;
}
}).show();
}
上面的所有代码都在同一个Plateform Class
中如何让AlertDialog保持在屏幕上并等待用户输入,然后再继续执行'常规'码?
答案 0 :(得分:0)
整个代码在UI线程上运行。
你是否在声明之后开始一个新的活动://其他'常规'代码在这里..
我的猜测是要么你正在完成当前的活动,要么开始一个让对话框闪烁一秒的新活动。
尝试:
AlertDialog alertDialog = new AlertDialog.Builder(this)
.setTitle( title)
.setMessage(message)
.setPositiveButton(positiveBtnText, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
//do stuff onclick of POSITIVE
Toast.makeText(getApplicationContext(), "You clicked on POSITIVE", Toast.LENGTH_LONG).show();
processingAlert = false;
}
})
.setNegativeButton(negativeBtnText, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
//do stuff onclick of NEGATIVE
Toast.makeText(getApplicationContext(), "You clicked on NEGATIVE", Toast.LENGTH_LONG).show();
processingAlert = false;
}
});
alertDialog.show();
alertDialog.setCancelable(false);
答案 1 :(得分:0)
科特林 对我有用的是设置警报对话框,然后让后续代码用完警报对话框。现在,当我看着我的屏幕时,我看到了一个可以点击的按钮。我什么都不做,除非我说可以继续,所以看起来像这样使它变得非常简单。 例如
binding.Btn.setOnClickListener { funXDialog(A, B) }
然后
fun funXDialog(A:B) {
val contextX = requireContext()
val alert = AlertDialog.Builder(contextX)
alert.setTitle("Title")
alert.setMessage("message")
alert.setPositiveButton("OK")) { _,
_ ->
funX(A,B) // execute the function if the positive button is pressed
}
alert.setNegativeButton("Cancel") {_, _ ->
funDoNothing() // if the cancel button is pressed.
}
alert.show()
}}
我正在处理一个片段。通过这种方式,我让用户暂停执行,直到他决定要做什么。这项工作就像一种魅力。需要注意的一件事 --- 如果 funXDialog 可以工作,并且它调用的函数设置在调用片段中而不是其他地方。