简体   繁体   English

Android - 错误的第一个参数类型和“android.supportv4.app.Fragment”

[英]Android - Wrong 1st argument type and ' android.supportv4.app.Fragment'

I'm creating a Material design tab view.我正在创建一个材料设计选项卡视图。 I'm getting an error after addFragment method on my Main Activity.在我的主活动中使用 addFragment 方法后出现错误。 This is the error that I'm getting.这是我得到的错误。

Wrong 1st argument type. Found: 'com.example.sa.tabproject.LatestPromoFragment, ' android.supportv4.app.Fragment'

My MainActivity.java我的 MainActivity.java

import android.app.Activity;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.support.v7.widget.Toolbar;
import android.app.Fragment;

public class MainActivity extends AppCompatActivity {
Toolbar toolbar;
TabLayout tabLayout;
ViewPager viewPager;
ViewPagerAdapter viewPagerAdapter;

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

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

    tabLayout=(TabLayout)findViewById(R.id.tab_layout);

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

    viewPagerAdapter= new ViewPagerAdapter(getSupportFragmentManager());


    viewPagerAdapter.addFragment(new LatestPromoFragment(),"Latest Promos"); // new LatestPromoFragment() should be in getItem() otherwise it will cause crashes
    viewPagerAdapter.addFragment(new MapViewFragment(),"Map View"); // new MapViewFragment() should be in getItem() otherwise it will cause crashes
    viewPager.setAdapter(viewPagerAdapter);
    tabLayout.setupWithViewPager(viewPager);

}}

ViewPagerAdapter.java ViewPagerAdapter.java

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.ArrayList;
import java.util.List;

public class ViewPagerAdapter extends FragmentPagerAdapter {
ArrayList<Fragment> fragment = new ArrayList<>(); // this line can cause crashes
ArrayList<String> tabTitles= new ArrayList<>();


public void addFragment(Fragment fragment,String titles){ 
    this.fragment.add(fragment); // this line can cause crashes
    this.tabTitles.add(titles);

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

}

@Override
public Fragment getItem(int position) {
    return fragment.get(position); // this should create the Fragment instances
}

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

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

I imported several fragment classes to the MainActivity.java.我将几个片段类导入到 MainActivity.java。 But it doesn't fix the error.但它不能修复错误。

This is because in adapter class you are using support fragment ie import android.support.v4.app.Fragment;这是因为在适配器类中您正在使用支持片段,即导入 android.support.v4.app.Fragment; and in Activity class you are using app fragment import android.app.Fragment;在 Activity 类中,您正在使用 app fragment import android.app.Fragment;

use same type of fragment every where it will work.在每个可以工作的地方使用相同类型的片段。

If you use android.support.v4.app.FragmentPagerAdapter , you must also use android.support.v4.app.Fragment for all Fragments.如果您使用android.support.v4.app.FragmentPagerAdapter ,您还必须为所有 Fragment 使用android.support.v4.app.Fragment

If you want to use android.app.Fragment native Fragments with a FragmentPagerAdapter or FragmentStatePagerAdapter, you need to use the v13 support library versions of the adapter, ie android.support.v13.app.FragmentPagerAdapter .如果您想使用带有 FragmentPagerAdapter 或 FragmentStatePagerAdapter 的android.app.Fragment原生 Fragment,则需要使用适配器的 v13 支持库版本,即android.support.v13.app.FragmentPagerAdapter

You can see this in the documentation if you look at the getItem() for each:如果您查看每个的 getItem() ,您可以在文档中看到这一点:

V4: http://developer.android.com/intl/en/reference/android/support/v4/app/FragmentPagerAdapter.html#getItem(int) V4: http : //developer.android.com/intl/en/reference/android/support/v4/app/FragmentPagerAdapter.html#getItem(int)

V13: http://developer.android.com/intl/en/reference/android/support/v13/app/FragmentPagerAdapter.html#getItem(int) V13: http : //developer.android.com/intl/en/reference/android/support/v13/app/FragmentPagerAdapter.html#getItem(int)

Replace your import android.app.Fragment;替换你的import android.app.Fragment; code代码

with

import android.support.v4.app.Fragment;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM