1

フラグメントアクティビティ内でsetTextコマンドを実行して、親アクティビティでtextViewのテキストを設定しようとしましたが、機能しません。何か案は?

TextView text = (TextView) getView().findViewById(R.id.status);
        text.setText("Text from a fragment");

eclipseでエラーは発生しませんが、実行時にnullポインター例外が発生します。もちろん、それは私がsetTextを設定した行で発生します。これを行う方法についてのアイデアはありますか?

4

2 に答える 2

5

getActivity()を使用します。これにより、findViewById()メソッドは基本アクティビティで検索を開始し、「r.id.status」が見つかるまでバブルアップします。

TextView text = (TextView) getActivity().findViewById(R.id.status);
text.setText("Text from a fragment");
于 2012-10-05T21:56:04.870 に答える
2

R.id.statusはい、おそらくフラグメントのビューで定義されていないため、NPEが発生する可能性があります。

getView()FragmentのonCreateView()メソッドで生成されたビューを返します。

(セカンダリ)FragmentActivityからアクティビティにTextViewを設定しようとしていますか、それともFragmentからFragmentActivityにTextViewを設定しようとしていますか?

これが1番目のオプションである場合は、メッセージハンドラーを使用して、2番目のアクティビティにメッセージを渡すなどの操作を行う必要があります。私はこれがあなたが求めているものではないと思います。

FragmentからTextViewを設定する場合、そのための一般的な方法は、FragmentActivityにメソッド(updateText()たとえば)を使用してインターフェイスを定義し、Fragmentにメソッドを呼び出すようにすることです。getView()次に、アクティビティはTextViewの更新を処理します。これは、探しているビューを返す呼び出しができるため、うまく機能します。ここに投稿された私の答えに似ています

于 2012-08-07T07:09:38.590 に答える