Note that there are some explanatory texts on larger screens.

plurals
  1. POPass the user input from an alert dialog to the activity and process it once the dialog dismisses in Android?
    primarykey
    data
    text
    <p>I have a pop-up dialog that asks for a user input.</p> <p>Once the user entered his/her input and then click 'OK', I wish the fragment to pass the user input back to the activity that is just behind the dialog.</p> <p>I have read something about <code>onDismiss(DialogInterface dialog)</code>. However, being a new learner of both Java and Android, I fail to implement it correctly:</p> <ol> <li><p>The handler never runs in my code.</p></li> <li><p>Even after the handler runs, I still do not know how to get the user input from the argument <code>dialog</code>, since it is of type <code>DialogInterface</code>, which I do not know how to deal with.</p></li> </ol> <p>Below are my code snippets.</p> <p>Activity side:</p> <pre><code> public class CalibrationActivity extends Activity implements SensorEventListener, DialogInterface.OnDismissListener { ... protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_calibration); buttonInit(); sensorInit(); } private void buttonInit() { // start calibrating button startCalibratingButton = (Button) findViewById(R.id.button1); startCalibratingButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { startCalibrationFlag = true; Toast.makeText(CalibrationActivity.this, "Please walk " + Constant.CALIBRATION_STEP_NUMBER + " steps and press the 'Done Calibrating' button", Toast.LENGTH_SHORT).show(); startCalibratingButton.setEnabled(false); doneCalibratingButton.setEnabled(true); } }); // done calibrating button doneCalibratingButton = (Button) findViewById(R.id.button2); doneCalibratingButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { startCalibrationFlag = false; RequireDistanceDialogFragment requireDistanceDialogFragment = new RequireDistanceDialogFragment(); requireDistanceDialogFragment.setCancelable(false); requireDistanceDialogFragment.show(getFragmentManager(), ALARM_SERVICE); // dialog pops up that leads the new user to calibrate // Error Here: "The method setOnDismissListener(new OnDismissListener(){}) is undefined for the type RequireDistanceDialogFragment" requireDistanceDialogFragment.setOnDismissListener(new OnDismissListener() { public void onDismiss(DialogInterface dialog) { LoadingActivity.this.finish(); } }); } }); startCalibratingButton.setEnabled(true); doneCalibratingButton.setEnabled(false); } // called when the dialog is dismissed public void onDismiss(DialogInterface requireDistanceDialogFragment) { // Error Here: The method getDistanceEntered() is undefined for the type DialogInterface double userInput = requireDistanceDialogFragment.getDistanceEntered(); processTheUserInputHere(); } } </code></pre> <p>Dialog side:</p> <pre><code>package com.example.drsystem; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.content.DialogInterface; import android.os.Bundle; import android.text.Editable; import android.text.InputType; import android.widget.EditText; import android.widget.Toast; public class RequireDistanceDialogFragment extends DialogFragment { private Editable distance; private boolean distanceIsEntered = false; public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the Builder class for convenient dialog construction AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); final EditText input = new EditText(getActivity()); input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); builder.setTitle("Distance is required to calibrate the stride length estimation.").setMessage("Distance (in m) for these " + Constant.CALIBRATION_STEP_NUMBER + " steps?").setView(input).setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // click ok distanceIsEntered = true; distance = input.getText(); } }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // click cancel Toast.makeText(getActivity(), "Calibration not done", Toast.LENGTH_SHORT).show(); } }); // Create the AlertDialog object and return it return builder.create(); } // if the user has not entered the distance yet, the distance returned is -1 public double getDistanceEntered() { if (distanceIsEntered) return Double.parseDouble(distance.toString()); else return -1; } } </code></pre> <p><strong>Either you can help me modify it by solving the 2 problems I have</strong></p> <p><strong>or you can propose new method to achieve this.</strong></p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload