2016-03-05 93 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