【问题标题】:SlidingMenu Fragment Switch Listener Null Pointer ExceptionSlidingMenu 片段切换监听器空指针异常
【发布时间】:2012-12-16 23:50:38
【问题描述】:

我呼吁这个活动作为我的主要任务,这个活动从这个库 https://github.com/jfeinstein10/SlidingMenu 扩展了 SlidingActivity。当它为我与片段一起使用的滑动菜单创建 backcontentview 时。在这个主要活动中,我为日历创建了一个自定义视图,在这个自定义视图中绘制了一些图标。我想切换这些图标,所以我在滑动菜单片段视图中使用开关,但我得到一个空指针异常,当我在开关所在的片段中切换时,日志 cat 说它在侦听器中发生。因此,我的代码清除了使用主活动中的自定义视图制作的日历上的图标,并且确实可以使用我在主活动中使用代码,但不在切换列表器 OnCheckedChangeListener 中。

这是调用幻灯片菜单和片段以填充幻灯片菜单的 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();


      }



  }


}

【问题讨论】:

  • 你能给我完整的代码吗,实际上我有不同片段的滑动菜单的问题。

标签: android fragment onclicklistener android-sliding


【解决方案1】:

你写道:

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

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

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

cv 似乎为空。 NPE 的一个可能原因是 cv 在创建 Fragment 时尚未实例化。假设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;
}

【讨论】:

    猜你喜欢
    • 2019-06-07
    • 2013-02-08
    • 1970-01-01
    • 2016-04-26
    • 2016-09-20
    • 1970-01-01
    • 2013-10-18
    • 2013-05-14
    • 1970-01-01
    相关资源
    最近更新 更多