如何在Fragment中创建EditText

3

我想在Fragment中创建可编辑的文本字段,在应用关闭或停止后可以保存。但是在return notatki;这一行中出现了问题。我已经有了以下代码:

public class DetailFragment2 extends Fragment {

    private EditText notatki;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e("Test", "hello");


    }     
    @SuppressLint("SimpleDateFormat")
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent,
            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.details2, parent, false);
        notatki = (EditText) view.findViewById(R.id.editText1);
        SharedPreferences settings = this.getActivity().getSharedPreferences("PREFS", 0);
        notatki.setText(settings.getString("value", ""));
        return view;
    }  
    @Override
    public void onStop( ){
        super.onStop();
        if(notatki.getText() != null) {
            SharedPreferences settings = this.getActivity().getSharedPreferences("PREFS", 0);
            SharedPreferences.Editor editor = settings.edit();
            editor.putString("value", notatki.getText().toString());
            editor.commit();
        }
    }
}

当我将return notatki;更改为return view;时,它可以正常工作,直到应用程序停止,当我想要保存editText的内容时,它没有保存任何内容。
5个回答

3

更改为

private EditText notatki;
@SuppressLint("SimpleDateFormat")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent,
        Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.details2, parent, false);
        notatki = (EditText) view.findViewById(R.id.editText1);
        SharedPreferences settings = this.getActivity().getSharedPreferences("PREFS", 0);
        notatki.setText(settings.getString("value", ""));

  return view; // return view here instead of notaki
}   

你已经将EditText声明为类成员

 private EditText notatki;

所以,只需在onCreateView中初始化它即可。

1
谢谢,我也把它改回了return view,现在一切都正确了。 - Borys Zielonka

1

改变

EditText notatki = (EditText) view.findViewById(R.id.editText1);

notatki = (EditText) view.findViewById(R.id.editText1);

因为如果你在onCreateView中再次声明它,它将掩盖全局变量,并且你会在onStop中得到null值。

0

试一下这个......

public View onCreateView(LayoutInflater inflater, ViewGroup parent,
        Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.details2, parent, false);
    EditText notatki = (EditText) view.findViewById(R.id.editText1);
    SharedPreferences settings = this.getActivity().getSharedPreferences("PREFS", 0);
    notatki.setText(settings.getString("value", ""));
    return view;
}  

尝试一下...?为什么不稍微解释一下呢? - Lalit Poptani

0
你做得很对,但问题在于你应该从onCreateView返回父视图而不是EditText实例notatki
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent,
            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.details2, parent, false);
        ....
        return view;
    }  

0
private EditText etext;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.secondfragment,container,false);
        etext = (EditText) getView().findViewById(R.id.editText4);
        return v;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接