2016-04-09 2 views
3

Я создаю представление вкладки Material design. Я получаю сообщение об ошибке после метода addFragment в моей основной деятельности. Это ошибка, которую я получаю.Android - неправильный тип 1-го аргумента и 'android.supportv4.app.Fragment'

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

Мои 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"); 
    viewPagerAdapter.addFragment(new MapViewFragment(),"Map View"); 
    viewPager.setAdapter(viewPagerAdapter); 
    tabLayout.setupWithViewPager(viewPager); 

}} 

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<>(); 
ArrayList<String> tabTitles= new ArrayList<>(); 


public void addFragment(Fragment fragment,String titles){ 
    this.fragment.add(fragment); 
    this.tabTitles.add(titles); 

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

} 

@Override 
public Fragment getItem(int position) { 
    return fragment.get(position); 
} 

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

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

Я импортировал несколько фрагментов классов к MainActivity.java. Но это не исправляет ошибку.

ответ

2

Это связано с тем, что в классе адаптера используется фрагмент поддержки i.e import android.support.v4.app.Fragment; и в классе Activity вы используете импорт фрагмента приложения android.app.Fragment;

использовать такой же тип фрагмента каждый, где он будет работать.

+0

@ DanielNugent Спасибо за указание, я отредактирую ответ :) – dex

1

Если вы используете android.support.v4.app.FragmentPagerAdapter, вы также должны использовать android.support.v4.app.Fragment для всех фрагментов.

Если вы хотите использовать собственные фрагменты android.app.Fragment с помощью FragmentPagerAdapter или FragmentStatePagerAdapter, вам необходимо использовать версии библиотеки поддержки v13 адаптера, то есть android.support.v13.app.FragmentPagerAdapter.

Вы можете увидеть это в документации, если вы посмотрите на GetItem() для каждого:

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)

+0

Большое спасибо за приятное объяснение. Оно работает. – coderaizer

0

Замените import android.app.Fragment; код

с

import android.support.v4.app.Fragment; 
Смежные вопросы