SlidingMenu Fragment Switch Listener Null Pointer Exception

时间:2012-12-16 23:50:39

标签: android fragment onclicklistener android-sliding

我正在调用这个活动作为我的主要laucher,这个活动扩展了这个库https://github.com/jfeinstein10/SlidingMenu的SlidingActivity。当它为slidemenu创建一个后部内容视图时,我使用了一个片段。在此主要活动中,我为日历创建自定义视图,在此自定义视图中绘制了图标。我想切换这些图标,所以我在滑动菜单片段视图中使用开关,但是我得到一个空指针异常,当我在切换器所在的片段中切换时,日志猫说它发生在列表器中。所以我的代码清除了使用主要活动中的自定义视图制作的日历上的图标,并且可以使用主活动中的代码但不在切换列表器中使用OnCheckedChangeListener。

Heres Mainactivity调用幻灯片菜单和片段来填充幻灯片菜单

    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();


      }



  }


}

1 个答案:

答案 0 :(得分:0)

您写道:

  

我得到一个空指针异常,当我在切换开关的片段(...)中切换时,日志猫说它发生在列表器中[在切换列表器OnCheckedChangeListener中不起作用。

根据您的描述,当您调用时会发生NullPointerException:

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

似乎cv为空。 NPE的一个可能原因是在创建Fragment时尚未实例化cv。假设cv是片段布局的一部分,您可以在onCreateView()中指定对'cv'的引用:

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;
}