Android 如何将在对话框窗口中动态创建的editText值保存到xml文件中安卓
我创建了两个类和一个接口。一个处理对话框点击的界面,一个包含按钮和文本视图的MainActivity类。mainActivity类实例化了我的第二个类(FireMissilesFragment),其中包含一个作为片段的AlertDialog。在FireMisslesFragment中,我动态创建了EditText。我的应用程序的问题是,当我在中实例化FireMissilesFragment的mainActivity类中调用(onsavenstancestate)时,我尝试保存我的editText值,以便当弹出窗口关闭并重新启动时,一旦弹出窗口再次打开,editText的值将保持其值 我尝试过(onSaveInstanceState)方法,并且这些值保持不变;然而,一旦对话再次启动,我仍有可能重新创建被破坏的内容。请有人解释一下这件事 这是我的密码: //========================================接口=====================================//Android 如何将在对话框窗口中动态创建的editText值保存到xml文件中安卓,android,Android,我创建了两个类和一个接口。一个处理对话框点击的界面,一个包含按钮和文本视图的MainActivity类。mainActivity类实例化了我的第二个类(FireMissilesFragment),其中包含一个作为片段的AlertDialog。在FireMisslesFragment中,我动态创建了EditText。我的应用程序的问题是,当我在中实例化FireMissilesFragment的mainActivity类中调用(onsavenstancestate)时,我尝试保存我的editText
public interface NoticeDialogListener {
public void onDialogPositiveClick(DialogFragment dialog,EditText[] editText);
public void onDialogNegativeClick(DialogFragment dialog);
}
//==================================================================================/
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends FragmentActivity implements ` NoticeDialogListener{
private EditText[] _edText;
private TextView _tv;
private Multiplication multi;
private Double[] s;
private String s1;
public static final String _SCORE1 = "score1";
public static final String _SCORE2 = "score2";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
_tv = (TextView)findViewById(R.id.textView1);
Button dAction = (Button)findViewById(R.id.button1);
s = new Double[2];
dAction.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {//open();
confirmFireMissiles();
}
});//ssetOnclickLi...
///success thank god.
//===================================================//
}
public void confirmFireMissiles() {
DialogFragment newFragment = new FireMissilesDialogFragment();
newFragment.show(getSupportFragmentManager(),"ff");
}//confirmFireMisslesClosing brace
// The below is what happens when the Button "multiply" in
Dialog window pops up.
@Override
public void onDialogPositiveClick(DialogFragment dialog,EditText[]
editText) {
_edText = editText; // is this association
multi = new Multiplication();
try{
// gets the text and stores to string array.
s[0]=Double.parseDouble(_edText[0].getText().toString());
s[1]=Double.parseDouble(_edText[0].getText().toString());
Log.d("hello", String.valueOf(s[0]));
}catch(NumberFormatException e){
_tv.setText("please Insert an Number and calculate again"); //
Log.d("Error", "place in numbers please");
}
s1 = String.valueOf(multi.multiply(s[0],s[1]));
//set Textview to s1.
_tv.setText(s1);
}
@Override
public void onDialogNegativeClick(DialogFragment dialog) {}
}
//================================================================================//
公共类FireMissileDialogFragment扩展了DialogFragment{
私有AlertDialog.Builder;
私有EditText[]\u edText;//准备就绪时启用
私人通知英语播音员;
公共静态最终字符串_SCORE1=“SCORE1”;
公共静态最终字符串_SCORE2=“SCORE2”;
私人双[]s
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
builder = new AlertDialog.Builder(getActivity());
//shows added content to dialog.
// d = new String[2];
s = new Double[2];
if(savedInstanceState !=null){
s[0] = Double.parseDouble(savedInstanceState.getString(_SCORE1));
s[1] = Double.parseDouble(savedInstanceState.getString(_SCORE2));
Log.d("Hey",String.valueOf(s[0]));
_edText[0].setText(String.valueOf(s[0]));
showIt();
}else{
showIt();
}
//sets the characterisitcs of the dialogue.
builder.setTitle("We are all stars of the show.");
builder.setMessage( "we are strong")
.setPositiveButton("Multiply", new
DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id) {
// enable when ready
_mListener.onDialogPositiveClick(FireMissilesDialogFragment.this,_edText);
}
});
// Create the AlertDialog object and return it
return builder.create();
}
public void showIt(){
//这段代码创建了一个线性布局,该布局应该显示在对话框弹出窗口中。
LayoutParams参数=新建LinearLayout.LayoutParams(LayoutParams.MATCH_父对象, LayoutParams.MATCH_PARENT,1.0f); LinearLayout布局=新的LinearLayout(getActivity()); 布局。setLayoutParams(参数); 布局。设置方向(线性布局。垂直); 布局.背景颜色(颜色.黑色)
//在线性布局中高效地动态放置EditText。
_edText=新编辑文本[4];
对于(int i=0;i<\u edText.length;i++){
_edText[i]=新的EditText(getActivity());
_edText[i].setInputType(InputType.TYPE_类_编号|
输入类型。类型\编号\标志\小数);
_edText[i].setTextSize(20)
试一试{
s[i]=Double.parseDouble(
_edText[i].getText().toString());
}捕获(数字格式){
//Log.d(“你好”,“输入错误”);
}
layout.addView(_edText[i]);
}
builder.setView(布局);
}
//========================================================================================请查看此代码======////////////
@凌驾
公共事务主任(活动){
超级转速计(活动);
//验证主机活动是否实现了回调接口
试一试{
//实例化NoticeDialogListener,以便我们可以向主机发送事件
_mListener=(注意的aloglistener)活动;
}catch(ClassCastException e){
//活动未实现接口,引发异常
抛出新的ClassCastException(activity.toString()
+“必须实施通知式许可”);
}
}
@凌驾
SaveInstanceState上的公共无效(Bundle savedInstanceState){
//保存用户的当前游戏状态
savedInstanceState.putDouble(_SCORE1,s[0]);
savedInstanceState.putdoull(_SCORE2,s[1]);
super.onSaveInstanceState(savedInstanceState);
}
}
您可能可以使用SharedReferences
将信息存储在那里,然后将文本编辑的文本设置为共享首选项的结果?还是我完全弄错了
下面是一个简单保存函数的示例:
SharedPrefrences scores = getSharedPreferences("key_name_here", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = scores.edit();
editor.putInt("key1", key1Var);
editor.putInt("key2", key2Var);
editor.commit();
并重新审理:
Var = getPrefrences(Context.MODE_PRIVATE).getInt("key1",default value);
这可能会起作用您可能可以使用
SharedReferences
将信息存储在那里,然后将文本编辑的文本设置为共享首选项的结果?还是我把整个想法搞错了?@Baruch,你的想法是对的。让我们看看会发生什么,然后我会告诉你。好的,我会在我上电脑后尽快发布一个答案,这样我会看看我的想法是否正确work@Baruch,一周来我一直试图自己解决这个问题,但还没有结果。我今天没能在电脑上工作,一天很长,但在我的理论上,只需逐个变量保存信息,然后当对话框再次加载时,只需通过变量设置文本编辑或文本区域。setText()如果可用,我将在明天更深入地研究它,祝你好运!我试过我的方法,但你的方法更好。非常感谢你。
Var = getPrefrences(Context.MODE_PRIVATE).getInt("key1",default value);