我基本上试图创建一个对话框,将用户输入文本作为"注意"它会保存注释并在下次打开对话框时显示注释,然后用户可以添加注释或从注释中取出并再次保存。非常感谢你提前。
这是我到目前为止所拥有的:
AlertDialog.Builder alert = new AlertDialog.Builder(ViewTask.this);
alert.setTitle("Task Note");
alert.setMessage("Please enter your note");
// Set an EditText view to get user input
final EditText input = new EditText(ViewTask.this);
alert.setView(input);
alert.setPositiveButton("Save", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
//String usernote = value;
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
});
alert.setCancelable(false);
alert.show();
break;
答案 0 :(得分:0)
您正在创建一个新String并为其分配值。用户点击" OK"字符串将从内存中消失。而是在类中创建一个局部变量,并在clicklistener中设置它
...
private String value;
...
alert.setPositiveButton("Save", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
value = input.getText().toString();
}
});
如果你想保存它,可以像这样使局部变量保持静态。
public static value;
然后,您可以通过调用YourActivity.value来访问所有类中的值。但要注意,如果你使用静态方法,字符串将在整个内存中占用空间,直到你设置它value = null
答案 1 :(得分:0)
就像易卜拉欣说的那样,一旦对话关闭,你就会丢失字符串。 为了使用它执行更多操作,例如将其保存到数据库或保存到sharedPreferences,您应该将其传递回创建此对话框的Activity,以便它可以处理它。
来自Passing events Back To The Dialog's Host
在Dialog或DialogFragment类中,添加一个公共接口,其中包含一个可以从Dialog调用的方法。
public class MyDialogFragment extends DialogFragment{
private DialogListener myListener;
private String text
public interface DialogListener {
public void onDialogAction(String text);
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// Verify the host activity implements the callback interface
try{
myListener = (DialogListener) activity;
} catch(ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement DialogListener");
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
alert.setTitle("Task Note");
alert.setMessage("Please enter your note");
// Set an EditText view to get user input
final EditText input = new EditText(ViewTask.this);
alert.setView(input);
alert.setPositiveButton("Save", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String value = input.getText().toString();
myListener.onDialogAction(value);
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
});
alert.setCancelable(false);
return alert.create()
}
现在你必须改变你的调用活动来实现我们刚刚在MyDialogFragment中创建的回调监听器
public class MainActivity extends Activity
implements NoticeDialogFragment.NoticeDialogListener{
private String text;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
SharedPreferences prefs = thist.sharedPreferences("com.example.app",
Context.MODE_PRIVATE);
text = prefs.getString("text_to_save", "");
}
...
public void showDialog(){
DialogFragment dialog = new DialogFragment();
dialog.show(getFragmentManager(), "MyDialog");
}
@Override
public void onDialogAction(String text){
// Save the String for next time
SharedPreferences prefs = this.getSharedPreferences("com.example.app",
Context.MODE_PRIVATE);
prefs.edit().putString("text_to_save", text).apply();
}
如果您想将一些数据传递给对话框,请说出之前从中获得的文字,您可以实现此answer。