2014-03-07 79 views
0

我正在將SlidingPaneLayout實現到我的應用程序中。以下各種教程我寫了這段代碼。在activity_main佈局

<android.support.v4.widget.SlidingPaneLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/sliding_pane_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <fragment 
     android:id="@+id/list" 
     class="com.mypackage.name.FirstFragment" 
     android:layout_width="280dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="left"></fragment> 

    <fragment 
     android:id="@+id/content" 
     class="com.mypackage.name.SecondFragment" 
     android:layout_width="450dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:paddingLeft="16dp" 
     android:paddingRight="16dp"></fragment> 

</android.support.v4.widget.SlidingPaneLayout> 

佈局第一片段是

<?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/listView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 
    </ListView> 

</LinearLayout> 

用於第二片段

<?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" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="TextView" /> 

</LinearLayout> 

類主要活動

public class MainActivity extends Activity { 

    SlidingPaneLayout slidingLayout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     slidingLayout = (SlidingPaneLayout)findViewById(R.id.sliding_pane_layout); 
     slidingLayout.setPanelSlideListener(new SlidingPaneLayoutListener()); 
    } 

    private class SlidingPaneLayoutListener implements SlidingPaneLayout.PanelSlideListener { 

     @Override 
     public void onPanelClosed(View view) { 
      // TODO Auto-generated method stub 
      getFragmentManager().findFragmentById(R.id.list).setHasOptionsMenu(false); 
      getFragmentManager().findFragmentById(R.id.content).setHasOptionsMenu(true); 
     } 

     @Override 
     public void onPanelOpened(View view) { 
      // TODO Auto-generated method stub 
      getFragmentManager().findFragmentById(R.id.list).setHasOptionsMenu(false); 
      getFragmentManager().findFragmentById(R.id.content).setHasOptionsMenu(true); 
     } 

     @Override 
     public void onPanelSlide(View view, float arg1) { 
      // TODO Auto-generated method stub 

     } 

    } 

} 

第一片段的類

public class FirstFragment extends Fragment { 

    ArrayAdapter<String> adapter; 
    String[] items; 
    ListView list; 
    View view; 

    public View onCreateView(LayoutInflater inflater, Bundle savedIstanceState, ViewGroup container) { 
     view = inflater.inflate(R.layout.lista_fragment, container, false); 
     list = (ListView)view.findViewById(R.id.listView); 
     items = new String[] {"EXAMPLE", "EXAMPLE", "EXAMPLE"}; 
     adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, items); 
     list.setAdapter(adapter); 

     return view; 
    } 

} 

當我啓動該應用程序崩潰.. logcat的:

03-07 14:42:49.501: E/AndroidRuntime(28780): FATAL EXCEPTION: main 
03-07 14:42:49.501: E/AndroidRuntime(28780): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mypackage.name/com.mypackage.name.MainActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class fragment 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2215) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2265) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.app.ActivityThread.access$800(ActivityThread.java:145) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1206) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.os.Handler.dispatchMessage(Handler.java:102) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.os.Looper.loop(Looper.java:136) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.app.ActivityThread.main(ActivityThread.java:5081) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at java.lang.reflect.Method.invokeNative(Native Method) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at java.lang.reflect.Method.invoke(Method.java:515) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at dalvik.system.NativeStart.main(Native Method) 
03-07 14:42:49.501: E/AndroidRuntime(28780): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class fragment 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:343) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.app.Activity.setContentView(Activity.java:1929) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at com.mypackage.name.MainActivity.onCreate(MainActivity.java:15) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.app.Activity.performCreate(Activity.java:5231) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2169) 
03-07 14:42:49.501: E/AndroidRuntime(28780): ... 11 more 
03-07 14:42:49.501: E/AndroidRuntime(28780): Caused by: android.app.Fragment$InstantiationException: Trying to instantiate a class com.mypackage.name.FirstFragment that is not a Fragment 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.app.Fragment.instantiate(Fragment.java:585) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.app.Fragment.instantiate(Fragment.java:561) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.app.Activity.onCreateView(Activity.java:4778) 
03-07 14:42:49.501: E/AndroidRuntime(28780): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689) 
03-07 14:42:49.501: E/AndroidRuntime(28780): ... 21 more 
03-07 14:42:49.501: E/AndroidRuntime(28780): Caused by: java.lang.ClassCastException 
03-07 14:42:49.501: E/AndroidRuntime(28780): ... 25 more 

我已經試過也清潔projct但我同樣的錯誤。哪裏有問題?

+0

'lista'和'adattore'? – Blackbelt

+0

對不起,我翻譯了英文的變量名,我忘記了那行 – user3382240

+0

將您的導入添加到您的代碼示例中。你擴展一個活動,但我敢打賭你擴展了v4片段。 – MinceMan

回答

0

只需在您的XML佈局中編寫Fragment而不是fragment。 XML區分大小寫。它在日誌中顯示爲#7: Error inflating class fragment

如果你想用你的FirstFragment類,那麼你必須寫名與XML文件中聲明的元素時,包括包名:

<com.mypackage.name.FirstFragment 
    ... > 
    ... 
</com.mypackage.name.FirstFragment> 
+0

ClassNotFoundException。沒有找到類「android.view.Fragment」。 – user3382240

+0

你想使用** Android的基地**'片段'類,**支持v4的**一個或**你的**'FirstFragment'? – Flawyte

+0

我想在我的應用程序中包含SlidingPaneLayout。在本教程中,有片段xml標籤http://www.survivingwithandroid.com/2013/10/android-slidingpanelayout-tutorial.html – user3382240