user1007692
user1007692

Reputation: 307

Sliding menu in a fragment class

I'm trying to use jfeinstein10 SlidingMenu in a fragment class.

public class ConversionFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.activity_conversion, container, false);

        super.onCreate(savedInstanceState);

        SlidingMenu menu = new SlidingMenu(BaseActivity.context);
        menu.setMode(SlidingMenu.LEFT);
        menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
        menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
        menu.attachToActivity((Activity) BaseActivity.context, SlidingMenu.SLIDING_WINDOW);
        menu.setMenu(R.layout.list);

        ListView lv = (ListView) rootView.findViewById(R.id.listView1);
        String[] values = new String[] { "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten" };
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(rootView.getContext().getApplicationContext(),
              android.R.layout.simple_list_item_1, android.R.id.text1, values);
        lv.setAdapter(adapter);

        return rootView;
    }
}

and my list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>
</LinearLayout>

I'm getting a null point exception at lv.setAdapter(adapter); What can be the cause of this?

Is this even the proper way to use jfeinstein10 SlidingMenu?

04-18 19:15:36.345: D/myapp(19089): java.lang.Exception 
04-18 19:15:36.345: D/myapp(19089):     at com.example.app1.ConversionFragment.onCreateView(ConversionFragment.java:44)
04-18 19:15:36.345: D/myapp(19089):     at android.app.Fragment.performCreateView(Fragment.java:1695)
04-18 19:15:36.345: D/myapp(19089):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)
04-18 19:15:36.345: D/myapp(19089):     at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
04-18 19:15:36.345: D/myapp(19089):     at android.app.BackStackRecord.run(BackStackRecord.java:682)
04-18 19:15:36.345: D/myapp(19089):     at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
04-18 19:15:36.345: D/myapp(19089):     at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
04-18 19:15:36.345: D/myapp(19089):     at android.os.Handler.handleCallback(Handler.java:725)
04-18 19:15:36.345: D/myapp(19089):     at android.os.Handler.dispatchMessage(Handler.java:92)
04-18 19:15:36.345: D/myapp(19089):     at android.os.Looper.loop(Looper.java:137)
04-18 19:15:36.345: D/myapp(19089):     at android.app.ActivityThread.main(ActivityThread.java:5041)
04-18 19:15:36.345: D/myapp(19089):     at java.lang.reflect.Method.invokeNative(Native Method)
04-18 19:15:36.345: D/myapp(19089):     at java.lang.reflect.Method.invoke(Method.java:511)
04-18 19:15:36.345: D/myapp(19089):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-18 19:15:36.345: D/myapp(19089):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-18 19:15:36.345: D/myapp(19089):     at dalvik.system.NativeStart.main(Native Method)
04-18 19:15:38.001: D/AndroidRuntime(19089): Shutting down VM   
04-18 19:15:38.001: W/dalvikvm(19089): threadid=1: thread exiting with uncaught exception (group=0x41e8b930)    
04-18 19:15:38.025: E/AndroidRuntime(19089): FATAL EXCEPTION: main  
04-18 19:15:38.025: E/AndroidRuntime(19089): java.lang.NullPointerException 
04-18 19:15:38.025: E/AndroidRuntime(19089):    at com.example.app1.ConversionFragment.onCreateView(ConversionFragment.java:45)
04-18 19:15:38.025: E/AndroidRuntime(19089):    at android.app.Fragment.performCreateView(Fragment.java:1695)
04-18 19:15:38.025: E/AndroidRuntime(19089):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:885)
04-18 19:15:38.025: E/AndroidRuntime(19089):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1057)
04-18 19:15:38.025: E/AndroidRuntime(19089):    at android.app.BackStackRecord.run(BackStackRecord.java:682)
04-18 19:15:38.025: E/AndroidRuntime(19089):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1435)
04-18 19:15:38.025: E/AndroidRuntime(19089):    at android.app.FragmentManagerImpl$1.run(FragmentManager.java:441)
04-18 19:15:38.025: E/AndroidRuntime(19089):    at android.os.Handler.handleCallback(Handler.java:725)
04-18 19:15:38.025: E/AndroidRuntime(19089):    at android.os.Handler.dispatchMessage(Handler.java:92)
04-18 19:15:38.025: E/AndroidRuntime(19089):    at android.os.Looper.loop(Looper.java:137)
04-18 19:15:38.025: E/AndroidRuntime(19089):    at android.app.ActivityThread.main(ActivityThread.java:5041)
04-18 19:15:38.025: E/AndroidRuntime(19089):    at java.lang.reflect.Method.invokeNative(Native Method)
04-18 19:15:38.025: E/AndroidRuntime(19089):    at java.lang.reflect.Method.invoke(Method.java:511)
04-18 19:15:38.025: E/AndroidRuntime(19089):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
04-18 19:15:38.025: E/AndroidRuntime(19089):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
04-18 19:15:38.025: E/AndroidRuntime(19089):    at dalvik.system.NativeStart.main(Native Method)
04-18 19:15:38.040: W/ActivityManager(389):   Force finishing activity com.example.app1/.BaseFragment   

Upvotes: 2

Views: 2208

Answers (1)

a.bertucci
a.bertucci

Reputation: 12142

It seems like you can't reference correctly the ListView used in the left-side of sliding menu. The problem is you are asking the wrong view (rootView) to find your list, returning in a null reference. You should inflate the menu view yourself and then invoke findViewById() on the inflated view instead, like this:

...
View left = inflater.inflate(R.layout.list,null,false);
...
menu.setMenu(left);
...
ListView lv = (ListView) left.findViewById(R.id.listView1);
...

I think there are another couple of errors in your code anyway. If you want to use the sliding menu inside your fragment, you should use the menu as the returning value of the onCreateView method. For the same reason you should not attach the menu to the entire activity, so you should remove the related line of code.

Upvotes: 3

Related Questions