Android 如何将在对话框窗口中动态创建的editText值保存到xml文件中安卓

Android 如何将在对话框窗口中动态创建的editText值保存到xml文件中安卓,android,Android,我创建了两个类和一个接口。一个处理对话框点击的界面,一个包含按钮和文本视图的MainActivity类。mainActivity类实例化了我的第二个类(FireMissilesFragment),其中包含一个作为片段的AlertDialog。在FireMisslesFragment中,我动态创建了EditText。我的应用程序的问题是,当我在中实例化FireMissilesFragment的mainActivity类中调用(onsavenstancestate)时,我尝试保存我的editText

我创建了两个类和一个接口。一个处理对话框点击的界面,一个包含按钮和文本视图的MainActivity类。mainActivity类实例化了我的第二个类(FireMissilesFragment),其中包含一个作为片段的AlertDialog。在FireMisslesFragment中,我动态创建了EditText。我的应用程序的问题是,当我在中实例化FireMissilesFragment的mainActivity类中调用(onsavenstancestate)时,我尝试保存我的editText值,以便当弹出窗口关闭并重新启动时,一旦弹出窗口再次打开,editText的值将保持其值

我尝试过(onSaveInstanceState)方法,并且这些值保持不变;然而,一旦对话再次启动,我仍有可能重新创建被破坏的内容。请有人解释一下这件事

这是我的密码:

//========================================接口=====================================//

        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);