尝试在android中实现滑动视图时出错

时间:2016-03-08 14:47:48

标签: java android android-fragments android-viewpager

对不起代码转储,我是android的新手,不知道问题出在哪里。我正在尝试在我的Android应用程序中实现滑动视图,我遇到了一些麻烦。我尝试关注this tutorialthis video,但我遇到了一些错误。我想要MainActivity

中的标签式界面

这是我的MainActivity.java

package com.loomius.loomius;

import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(myToolbar);

        ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        PagerAdapter pagerAdapter = new FixedTabsPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(pagerAdapter);

    }   
}

我收到getSupporFragmentManager()

的错误
'FixedTabsPagerAdapter(android.app.FragmentManager)' in 'com.loomius.loomius.FixedTabsPagerAdapter' cannot be applied to '(android.support.v4.app.FragmentManager)'

这是我的FixedTabsPagerAdapter.java

package com.loomius.loomius;

import android.app.FragmentManager;
import android.content.Context;
import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.app.Fragment;

import values.MatchesFragment;
import values.SuggestedSongsFragment;
import values.UserFragment;


public class FixedTabsPagerAdapter  extends FragmentPagerAdapter{
    public FixedTabsPagerAdapter (FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return 4;
    }

    @Override
    public Fragment getItem(int position) {
        switch(position) {
            case 0:
                return new SearchFragment();
            case 1:
                return new UserFragment();
            case 2:
                return new MatchesFragment();
            case 3:
                return new SuggestedSongsFragment();
            default:
                return null;
        }
    }

    Context context;

    @Override
    public CharSequence getPageTitle (int position) {
        switch(position) {
            case 0:
                return context.getResources().getString(R.string.search_frag_title);
            case 1:
                return context.getResources().getString(R.string.user_frag_title);
            case 2:
                return context.getResources().getString(R.string.matches_frag_title);
            case 3:
                return context.getResources().getString(R.string.sugg_frag_title);
            default:
                return null;

        }
    }
}

我在重写方法Fragment

中收到返回类型getItem的错误
'getItem(int)' in 'com.loomius.loomius.FixedTabsPagerAdapter' clashes with 'getItem(int)' in 'android.support.v13.app.FragmentPagerAdapter'; attempting to use incompatible return type

我将android.support.v4.view.ViewPager小部件放在activity_main.xml小部件正下方的android.support.v7.widget.Toolbar中。

2 个答案:

答案 0 :(得分:0)

查看你的FixedTabPagerAdapter构造函数,你试图在传递android.app.FragmentManager类型的片段管理器时捕获android.support.v4.app.FragmentManager实例的引用,这是两个不同的类。

将FixedTabPageAdapter中的FragmentManager类型更改为android.support.v4.app.FragmentManager,它应该可以解决问题。

答案 1 :(得分:0)

对于带有标签的滑动页面,请执行以下操作。

在github上下载或复制以下两个文件并粘贴您的项目。 这与developers.google.com相同,但setDistributeEvenly方法除外。

https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/SlidingTabLayout.java

https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/SlidingTabStrip.java

activity_main.xml中

<your.package.name.SlidingTabLayout
    android:clickable="true"
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >
 </your.package.name.SlidingTabLayout>

 <android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    />

MyAdapter.java(这里我只用了两页)

class MyPagerAdapter extends FragmentPagerAdapter
{
    String[] title = {"All","Favourites"};
    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }
    @Override
    public Fragment getItem(int position) {
        Fragment fragment=null;
         if (position==0)
            fragment= new All();
             if (position==1)
                fragment= new Favourites();
        return fragment;
    }
    @Override
     public int getCount() {
        return 2;
    }
       @Override
       public CharSequence getPageTitle(int position) {
             return title[position];
    }
 }

tab_view.xml(仅限标签视图,如果您需要,您也可以在此处使用ImageView)

   <FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >
    <TextView
        android:id="@+id/tab_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text=""
        android:padding="15dp"
        android:textStyle="bold"
        android:textSize="25dp"
        />
   </FrameLayout>

MainActivity.java

  private SlidingTabLayout tabLayout;
 private ViewPager pager;
 tabLayout= (SlidingTabLayout) findViewById(R.id.tabs);
 pager = (ViewPager) findViewById(R.id.pager);
 tabLayout.setCustomTabView(R.layout.tab_view,R.id.tab_title);
 MyPagerAdapter adapter =  new MyPagerAdapter(getSupportFragmentManager());
 pager.setAdapter(adapter);
 tabLayout.setDistributeEvenly(true);
 tabLayout.setViewPager(pager);