2016-05-08 7 views
2

私は2つのアクティビティを持っています - ホームフラグメントアクティビティと通常のオプションアクティビティです。EditText View returns null

私のホーム・フラグメント・アクティビティでは、Optionsアクティビティから取得したデータを使用してEditText Viewを更新しようとしています。

何らかの理由で、フラグメントアクティビティが更新に関する私の見解を検出できません。なぜ私は完全にはわからない。ここに私の機能は次のとおりです。

//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]); } 

    } 

奇妙なことがされて...のEditTextビューを取得するための、式は、私のコードの他の部分で完全に正常に動作します。しかし、ここでは常にnullを返します。助言がありますか?

編集:私はOnCreateView内の関数を呼び出すのはここです:

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

ID Input_Nameが、フラグメントが作業している同じレイアウト内にあるかどうかを確認してください。 –

+0

そうです。私は実際に同じフラグメントアクティビティの他の関数でそれを参照しています。 – NBC

答えて

3

編集:

移動このスニペット:onViewCreated方法に

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

になりますビューが膨らんだ後に呼び出されます。

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

Fragmentのライフサイクルの詳細は、このイメージを参照してください。

Fragment's lifecycle


フラグメントのonCreateView()コールバックがトリガーされた後、あなたのupdateUserDataメソッドを呼び出していることを確認します。


this answerで述べたようにgetView()代わりのgetActivity()を使用してみてください。

getActivity()getView()はあなたが膨張したとonCreateViewによって返されたビューを返しながら、フラグメントをホスティングしている活動を返します。後者は、onCreateViewが復帰した後にのみ値!= nullを返します。


あなたは確かにID Input_NameEditTextを持っている場合にも、コメントで述べたように、確認してください。

+0

素晴らしいコードを動かす!しかし、私は混乱しています...私はOnCreateからの他の意見を膨らませることに問題はなかったので、なぜこの時間は問題でしたか? – NBC

+0

イメージを変更して、 'onViewCreated'がどこから呼び出されたかを確認する方が簡単です。 'onCreateView'が何かを返す前に、あなたのレイアウトは膨らんでいません(あなたのレイアウト内のすべての子を持つ実際のビュー)。したがって、このViewが返された後に 'onViewCreated'がトリガーされることが保証されます。 –