EditText View returns null

2019-07-11 08:00发布

问题:

I have two activities - a Home fragment activity, and a normal Options activity.

In my home fragment activity, I'm trying to update an EditText View using data retrieved from the Options activity.

Unfortunately, for some reason, the fragment activity cannot detect my view for updating. I'm not entirely sure why. Here is my function:

//update text box
public void updateUserData (String[] userArray){

    Log.d("User Update:", "beginning...");
    //get username
    EditText et=(EditText)getActivity().findViewById(R.id.Input_Name);

    if (et == null) {
        Log.d("ERROR:", "View returning null");
    }

    if (userArray[0] != null) {
        Log.d("Updating name:", userArray[0]);
        et.setText(userArray[0]); }

    }

The weird thing is... that formula for retrieving the EditText View works perfectly fine in other parts of my code. But here it always returns null. Any suggestions?

edit: here is where I call the function in OnCreateView:

   if(getActivity().getIntent() != null && getActivity().getIntent().getExtras() != null) {
        String[] prelimUserArray = getActivity().getIntent().getExtras().getStringArray("userArray");
        updateUserData(prelimUserArray);
    }

回答1:

Edit:

Move this snippet:

if (getActivity().getIntent() != null && getActivity().getIntent().getExtras() != null) {
    String[] prelimUserArray = getActivity().getIntent().getExtras().getStringArray("userArray");
    updateUserData(prelimUserArray);
}

to the onViewCreated method, which will be called after the view has been inflated.

public void onViewCreated(View view, @Nullable Bundle savedInstanceState){
    // Your code here
}

Check this image for more information about the Fragment's lifecycle.


Make sure that you are calling your updateUserData method after the Fragment's onCreateView() callback has been triggered.


Try using getView() instead of getActivity() as mentioned in this answer.

getActivity() returns the Activity hosting the Fragment, while getView() returns the view you inflated and returned by onCreateView. The latter returns a value != null only after onCreateView returns.


Also, as mentioned in the comments, check if you indeed have the EditText with an id Input_Name.