次のXMLを含むViewFlipperがあります。これはすべてRelativeLayout内に含まれていることに注意してください。
<ViewFlipper
android:id="@+id/flipperIdentView"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<include layout="@layout/identification_face"/>
<include layout="@layout/identification_rfid"/>
<include layout="@layout/identification_voice"/>
<include layout="@layout/identification_pill_dispense"/>
</ViewFlipper>
<LinearLayout
android:id="@+id/linear_button_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
android:orientation="vertical" >
<include
android:layout_width="wrap_content"
android:layout_height="wrap_content"
layout="@layout/test_buttons"
android:gravity="center" />
</LinearLayout>
LinearLayoutのIDは「linear_button_view」です。これでフラグメント内に、フリッピングを決定するコードがあり、すべてが機能します。問題は、フリッパーのインデックス3に到達したときに、このレイアウトを非表示にしたいということです。このIDでフィールドを作成し、VisibilityをView.Goneに設定するだけです。しかし、これを行おうとすると、NPEをスローします。
クラスの中には:
private View buttonView;
onCreateView内に、次のコードがあります
View v = inflater.inflate(R.layout.pilltransferflipper, container, false);
buttonView = v.findViewById(R.id.linear_button_view);
これはフリッパーを制御する私の方法であり、ビューを非表示にする責任があります。
private void nextState() {
flipperIndex++;
if (flipperIndex >= flipperPillTransfer.getChildCount()) {
MainActivity activity = (MainActivity) getActivity();
activity.stateChange(State.SESSIONFINISHED);
} else {
flipperPillTransfer.showNext();
Log.d(TAG, "FLIPPER INDEX: " + flipperIndex);
if(flipperIndex == 3) {
buttonView.setVisibility(View.GONE);
}
}
}
Log.dメッセージをflipperIndex条件の中に入れると、正常に返されます。問題は、buttonView.setVisibilityの一部であるようです。フラグメントを使用しているため、メインアクティビティで使用できるメソッドの中には使用できないものがあることに注意してください。ありがとう!
これがlogCatです
09-26 10:05:54.381: D/PillTransferFragment(1719): FLIPPER INDEX: 3
09-26 10:05:54.381: D/AndroidRuntime(1719): Shutting down VM
09-26 10:05:54.381: W/dalvikvm(1719): threadid=1: thread exiting with uncaught exception (group=0x40c2b300)
09-26 10:05:54.381: E/AndroidRuntime(1719): FATAL EXCEPTION: main
09-26 10:05:54.381: E/AndroidRuntime(1719): java.lang.NullPointerException
09-26 10:05:54.381: E/AndroidRuntime(1719): at com.example.android.fragments.PillTransferFragment.nextState(PillTransferFragment.java:107)
09-26 10:05:54.381: E/AndroidRuntime(1719): at com.example.android.fragments.PillTransferFragment.onClick(PillTransferFragment.java:64)
09-26 10:05:54.381: E/AndroidRuntime(1719): at android.view.View.performClick(View.java:4084)