【发布时间】:2013-06-21 01:26:51
【问题描述】:
我有一个要求用户输入的弹出对话框。
一旦用户输入他/她的输入,然后单击“确定”,我希望片段将用户输入传递回对话框后面的活动。
我读过一些关于onDismiss(DialogInterface dialog) 的内容。但是,作为 Java 和 Android 的新手,我无法正确实现它:
处理程序从未在我的代码中运行。
即使处理程序运行后,我仍然不知道如何从参数
dialog获取用户输入,因为它是DialogInterface类型,我不知道如何处理。
下面是我的代码 sn-ps。
活动端:
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();
}
}
对话端:
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;
}
}
你可以通过解决我遇到的 2 个问题来帮助我修改它
或者您可以提出新的方法来实现这一点。
【问题讨论】:
-
使用 startActivityForResult(calibrationIntent, 0);并检查它是否有所不同,此链接可能会帮助您实现上述想法stackoverflow.com/questions/10407159/…
-
@ingsaurabh 有帮助。但问题是弹出对话框不是一个活动。所以当它完成时,
onActivityResult()不会被调用,对吗? -
ok 之前在代码中写了 startActivity 所以我建议现在试试这个stackoverflow.com/questions/12622742/…
标签: android android-dialog android-dialogfragment