2016-03-05 95 views
1

我是新手。我正在關注Swipe Tab Activity上的一個教程http://www.androidhive.info/2015/09/android-material-design-working-with-tabs/奇怪的錯誤。不兼容類型錯誤行「return mFragmentList.get(position);」

我在「return mFragmentList.get(position);」處得到不兼容類型的奇怪錯誤在MainActivity.java請幫助。

MainActivity.java

package com.pixalstudio.musicadda; 

import android.os.Bundle; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.Toolbar; 
import android.support.v4.app.Fragment; 

import java.util.ArrayList; 
import java.util.List; 

public class MainActivity extends AppCompatActivity { 

    private Toolbar toolbar; 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     setupViewPager(viewPager); 

     tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 
    } 

    private void setSupportActionBar(Toolbar toolbar) { 
    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFragment(new OneFragment(), "ONE"); 
     adapter.addFragment(new TwoFragment(), "TWO"); 
     adapter.addFragment(new ThreeFragment(), "THREE"); 
     viewPager.setAdapter(adapter); 
    } 

    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<android.app.Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 

     @Override 
     public android.support.v4.app.Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 

     @Override 
     public int getCount() { 
      return mFragmentList.size(); 
     } 

     public void addFragment(android.app.Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 
} 

如果任何人有什麼需要幫助,請讓我知道。 thanx提前:)

logcat的

03-04 21:38:22.643 2650-2650/com.pixalstudio.musicadda E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.pixalstudio.musicadda, PID: 2650 
                     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.pixalstudio.musicadda/com.pixalstudio.musicadda.MainActivity}: java.lang.ClassCastException: android.support.v7.widget.Toolbar cannot be cast to android.widget.Toolbar 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:135) 
                      at android.app.ActivityThread.main(ActivityThread.java:5254) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:372) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
                      Caused by: java.lang.ClassCastException: android.support.v7.widget.Toolbar cannot be cast to android.widget.Toolbar 
                      at com.pixalstudio.musicadda.MainActivity.onCreate(MainActivity.java:26) 
                      at android.app.Activity.performCreate(Activity.java:5990) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)  
                      at android.app.ActivityThread.access$800(ActivityThread.java:151)  
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)  
                      at android.os.Handler.dispatchMessage(Handler.java:102)  
                      at android.os.Looper.loop(Looper.java:135)  
                      at android.app.ActivityThread.main(ActivityThread.java:5254)  
                      at java.lang.reflect.Method.invoke(Native Method)  
                      at java.lang.reflect.Method.invoke(Method.java:372)  
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)  
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)  
03-04 21:38:22.645 1519-1887/system_process W/ActivityManager: Force finishing activity 1 com.pixalstudio.musicadda/.MainA 

ctivity

的build.gradle

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 

    defaultConfig { 
     applicationId "com.pixalstudio.musicadda" 
     minSdkVersion 14 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.2.0' 
    compile 'com.android.support:design:23.2.0' 
    compile 'com.android.support:support-v4:23.2.0' 
} 

回答

1

變化:

private final List<android.app.Fragment> mFragmentList = new ArrayList<>(); 

要:

private final List<Fragment> mFragmentList = new ArrayList<>(); 

您不像在其他地方那樣使用支持片段。

同樣與addFragment方法:

public void addFragment(Fragment fragment, String title) { 
    mFragmentList.add(fragment); 
    mFragmentTitleList.add(title); 
} 

你可以只用Fragment因爲你正在導入的支持庫片段import android.support.v4.app.Fragment;更換這些線路。

另請注意,OneFragment,TwoFragmentThreeFragment必須從支持庫片段擴展(如果尚未支持)。

根據發佈的新日誌,還需要從支持庫中導入工具欄。

import android.support.v7.widget.Toolbar; 
+0

您的建議解決了錯誤,但應用程序在運行時崩潰。我在上面發佈LOGCAT。請檢查什麼是錯的。感謝您的快速回復。 – akkie4396

+0

@ akkie4396您正在導入錯誤的工具欄。您還需要支持庫中的工具欄,因此導入應該是'import android.support.v7.widget.Toolbar;' –

+0

當我嘗試導入它時不會自動建議我andoird.support.v7.widget.Toolbar .. 。我必須手動輸入它,然後顯示紅色錯誤。 – akkie4396

0

這是你的問題所在。您正在使用android支持庫版本7,而教程正在使用android小部件工具欄。

android.support.v7.widget.Toolbar不能轉換到android.widget.Toolbar

在佈局文件更改工具欄

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    app:popupTheme="@style/AppTheme.PopupOverlay" /> 

記得導入這個

import android.support.v7.widget.Toolbar; 
+0

它已經與您在activity_main.xml中說的相同 – akkie4396

+0

「它已經和您在activity_main.xml中說的一樣了」 - 抱歉,我不明白 – Inducesmile