android alertdialog暂停活动

时间:2015-07-23 19:01:04

标签: android alertdialog

我有活动代码,我想在其中添加条件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保持在屏幕上并等待用户输入,然后再继续执行'常规'码?

2 个答案:

答案 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 可以工作,并且它调用的函数设置在调用片段中而不是其他地方。