0

このアクティビティは、このライブラリhttps://github.com/jfeinstein10/SlidingMenuからSlidingActivityを拡張するものであるため、このアクティビティを呼びかけています。それがslidingmenuのbehindcontentviewを作成するとき、私はフラグメントで使用します。このメインアクティビティでは、カレンダーのカスタムビューを作成し、このカスタムビューに描画されるアイコンがあります。これらのアイコンを切り替えたいので、スライドメニューのフラグメントビューでスイッチを使用していますが、スイッチがあるフラグメントを切り替えると、logcatがリストナーで発生すると言うnullポインター例外が発生します。したがって、メインアクティビティのカスタムビューを使用して作成されたカレンダーのアイコンをクリアするコードは、メインアクティビティのコードを使用しますが、トグルリストナーのOnCheckedChangeListener内では使用しません。

スライドメニューとフラグメントを呼び出してスライドメニューを埋めるメインアクティビティ

    setBehindContentView(R.layout.menu_frame);
    FragmentTransaction t = this.getSupportFragmentManager().beginTransaction();
    mFrag = new ColorFragment();
    t.replace(R.id.menu_frame, mFrag);
    t.commit();

    // customize the SlidingMenu
    SlidingMenu sm = getSlidingMenu();
    sm.setShadowWidthRes(R.dimen.shadow_width);
    sm.setShadowDrawable(R.drawable.shadow);
    sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
    sm.setFadeDegree(0.35f);
    sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
    //sm.attachToActivity(this, SlidingMenu.SLIDING_WINDOW);



    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    //redrawtest();
   // setListener();

これがこのメインアクティビティの私のxmlです。

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<com.projects.shiftcalendar.CalendarView
    android:id="@+id/view_month_calendar"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
</com.projects.shiftcalendar.CalendarView>

</LinearLayout>

これは私の断片です

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {
    return inflater.inflate(R.layout.slide_menu_toggle, null );

}

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    Switch d = (Switch) getView().findViewById(R.id.monitored_switch1);
    d.setOnCheckedChangeListener(this);


}

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {



    if(isChecked){

        cv.redrawCalendarClearSymbol();



    }
    else {

        cv.redrawCalendarClearSymbol();


      }



  }


}
4

1 に答える 1

0

あなたが書いた:

スイッチが(...)であるフラグメントでトグルすると、リストナーで発生するとログ猫が言ったヌルポインタ例外が発生しています[トグルリストナーOnCheckedChangeListener内では機能しません。

説明に基づいて、次を呼び出すと NullPointerException が発生します。

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){
     //...        
    cv.redrawCalendarClearSymbol();

cvnullのようです。NPE の考えられる理由の 1 つはcv、フラグメントが作成されたときにインスタンス化されていないことです。がフラグメントのレイアウトの一部であると仮定するとcv、次のように「cv」への参照を割り当てることができますonCreateView()

YourCustomType cv;//field

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    ViewGroup vg = (ViewGroup) inflater.inflate(R.layout.slide_menu_toggle, null);
    cv = (YourCustomType)vg.findViewById(R.id.yourIdForCVInTheFragmentLayout);
    return vg;
}
于 2012-12-17T00:26:29.427 に答える