0

editText の値を取得して共有設定に保存しようとしていますが、これを行いました:

SharedPreferences participant;
    Editor editor;
    private EditText firstname = null;
    private String name =null;
    private LinearLayout formbis;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_participant);

        participant = this.getSharedPreferences("participant", getBaseContext().MODE_PRIVATE);
        editor = participant.edit();


        formbis = (LinearLayout) findViewById(R.id.formbis);



        firstname = new EditText(this);
        firstname.setHint("first name");
        firstname.setTextSize(12);
        firstname.setLayoutParams(new LayoutParams(
                LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT));
        name = firstname.getText().toString();
        editor.putString("key", name);
        editor.commit();

        formbis.addView(firstname);

しかし、sharedPreferences XML ファイルを開くと、これだけが見つかります: editText からの値はありません:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="key"></string>
</map>
4

2 に答える 2

2

リスナーを追加してEditText、ユーザーがテキストを入力したときに値をコミットする必要があります。

于 2013-06-13T15:05:55.823 に答える
2

getText前の の結果を返しますsetText。コールしfirstname.setText("your string")ます。

提供するスニペットでは、ユーザーはテキストを入力する時間がありません。コミットを呼び出すときは遅すぎます。たとえば、「確認ボタン」を使用して、それをクリックすると、onClickedittext の呼び出しコミットで、または TextWatcher を実装できます

private class MyTextWather implements TextWatcher {


    @Override
    public void afterTextChanged(Editable s) {
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
         // it is called every time you put something inside your edittext

}
于 2013-06-13T15:01:59.713 に答える