Search code examples
androidandroid-fragmentsandroid-edittext

How to create editText in fragment


I'd like to create editable textfield in fragment, which after close or stop of app would be saved. But there's something wrong in line with return notatki; I already have this:

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

When I change return notatki; to return view; it works until the stop of app, when I wanted to save content of editText but it isn't saving anything.


Solution

  • Change to

    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
    }   
    

    You have already declared EditText as a class member

     private EditText notatki;
    

    So just initialize it in onCreateView.