1

私は2つのフラグメントでアプリケーションを作成しています。最初のフラグメントは、両方のフラグメントを作成したアクティビティにテキスト情報を送信します。それは完璧に機能します。私の2番目のフラグメントは、最初のフラグメントと同時に作成されます。2番目のフラグメントには、xmlレイアウトにテキストビューが含まれています。私の主な活動は、テキストベースのデータを2番目のフラグメントに渡し、テキストを表示する必要があります。問題は、テキストが2番目のfragmentsメソッドに到達すると、textviewが常にnullポインタを返すことです。

//This is the main methods creation of the fragment    
try {  
    //message frag on bottom
    FragmentManager fM = getFragmentManager();
    FragmentTransaction fTrans = fM.beginTransaction(); 
    messFrag = new DisplayMessageFragment();
    fTrans.add(R.id.BottomDisplayFragment, messFrag,"MESSAGE_FRAGMENT");
    fTrans.commit();
} catch(Exception e) {
    e.printStackTrace();
}
//this is whe main methods call the fragments text view updating method
@Override
public void getDisplayWindowMessage_StartFrag(String message) {
    getFragmentManager().findFragmentByTag("MESSAGE_FRAGMENT");
    messFrag.setMessage(message);
}
//This is my fragment class        
public class DisplayMessageFragment extends Fragment {
    TextView displayedMessage;
    View view ;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        view = inflater.inflate(R.layout.displaymess_frag,container, false);
        displayedMessage = (TextView) view.findViewById(R.id.MessageDisplay);

        return view;
    }

    public void setMessage(String newMessage){
        //displayedMessage=(TextView) view.findViewById(R.id.MessageDisplay);
        displayedMessage = (TextView) getView().findViewById(R.id.MessageDisplay);
        displayedMessage.setText(newMessage);
    }
}

スタックトレース:

java.lang.NullPointerException
12-26 02:06:14.505: E/AndroidRuntime(710):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
12-26 02:06:14.505: E/AndroidRuntime(710):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
12-26 02:06:14.505: E/AndroidRuntime(710):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
12-26 02:06:14.505: E/AndroidRuntime(710):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
12-26 02:06:14.505: E/AndroidRuntime(710):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-26 02:06:14.505: E/AndroidRuntime(710):  at android.os.Looper.loop(Looper.java:137)
12-26 02:06:14.505: E/AndroidRuntime(710):  at android.app.ActivityThread.main(ActivityThread.java:4424)
12-26 02:06:14.505: E/AndroidRuntime(710):  at java.lang.reflect.Method.invokeNative(Native Method)
12-26 02:06:14.505: E/AndroidRuntime(710):  at java.lang.reflect.Method.invoke(Method.java:511)
12-26 02:06:14.505: E/AndroidRuntime(710):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-26 02:06:14.505: E/AndroidRuntime(710):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-26 02:06:14.505: E/AndroidRuntime(710):  at dalvik.system.NativeStart.main(Native Method)
12-26 02:06:14.505: E/AndroidRuntime(710): Caused by: java.lang.NullPointerException
12-26 02:06:14.505: E/AndroidRuntime(710):  at .DisplayMessageFragment.setMessage(DisplayMessageFragment.java:38)
12-26 02:06:14.505: E/AndroidRuntime(710):  at .Schduler_Activity.getDisplayWindowMessage_StartFrag(Schduler_Activity.java:79)
12-26 02:06:14.505: E/AndroidRuntime(710):  at 
StartFragment.onCreateView(StartFragment.java:31)
12-26 02:06:14.505: E/AndroidRuntime(710):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:828)
12-26 02:06:14.505: E/AndroidRuntime(710):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032)
12-26 02:06:14.505: E/AndroidRuntime(710):  at android.app.BackStackRecord.run(BackStackRecord.java:622)
12-26 02:06:14.505: E/AndroidRuntime(710):  at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1382)
12-26 02:06:14.505: E/AndroidRuntime(710):  at android.app.Activity.performStart(Activity.java:4474)
12-26 02:06:14.505: E/AndroidRuntime(710):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1929)
12-26 02:06:14.505: E/AndroidRuntime(710):  ... 11 more
4

2 に答える 2

0

エラーが見つかりました。フラグメントが直接通信できないため、NPE をスローする最初のフラグメント コールバック中に 2 番目のフラグメントを呼び出そうとしました。

于 2012-12-27T01:41:10.553 に答える
0

なぜ変数を再設定しようとしていますdisplayedMessageか? それを設定しonCreateView、クラス変数として持っているので、serMessageメソッドを呼び出すときにまだそこにあるはずです。

メソッドに をドロップするだけfindViewByIdsetMesage、NPE がなくなると思います。

于 2012-12-26T00:29:16.503 に答える