AndroidStudio使用ViewPagerIndicator

1.增加jar包 - com.viewpagerindicator:library:2.4.1


2、找到ViewPagerIndicator给的Sample,找到自己需要的视图,然后拷贝代码即可,依照TabPageIndicator为例

AndroidStudio使用ViewPagerIndicator_第1张图片

3、代码

Activity.class

java:注意:Activity一定要写主题为android:theme="@style/AppTheme"
<pre name="code" class="java">package com.huiting.activity;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.SearchView;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;

import com.huiting.R;
import com.huiting.fragment.MainActivityFactoryFragment;
import com.huiting.tools.LogUtils;
import com.viewpagerindicator.TabPageIndicator;

/**
 * 绘厅
 * Created by zst on 16/1/15.
 */
public class HallActivity extends BaseActivity {
    private static final String[] CONTENT = new String[] { "Recent", "Artists", "Albums", "Songs", "Playlists", "Genres" };

    @Override
    protected void initActionBar() {
        super.initActionBar();
        ActionBar actionBar = getSupportActionBar();

        //标题布局配置
        ActionBar.LayoutParams alTitle = new ActionBar.LayoutParams(
                ActionBar.LayoutParams.WRAP_CONTENT,
                ActionBar.LayoutParams.WRAP_CONTENT,
                Gravity.CENTER
        );
        View viewTitleBar = getLayoutInflater().inflate(R.layout.title_hall, null);

        //标题自定义
        actionBar.setCustomView(viewTitleBar, alTitle);
        actionBar.setDisplayHomeAsUpEnabled(false);//去掉导航
        actionBar.setDisplayShowTitleEnabled(false);//去掉标题
        actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);//设置自定义的Custom
        actionBar.setDisplayShowCustomEnabled(true);//显示自定义Custom

        //返回自定义
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeAsUpIndicator(R.mipmap.btn_back);
        actionBar.setDisplayShowHomeEnabled(true);
    }

    @Override
    protected void init() {
        super.init();
    }

    @Override
    protected void initView() {
        super.initView();
        setContentView(R.layout.activity_hall);

        FragmentStatePagerAdapter adapter = new MyAdapter(getSupportFragmentManager());

        ViewPager pager = (ViewPager)findViewById(R.id.pager);
        pager.setAdapter(adapter);

        TabPageIndicator indicator = (TabPageIndicator)findViewById(R.id.indicator);
        indicator.setViewPager(pager);

        LogUtils.d("哈哈哈哈", indicator + "");
        indicator.setVisibility(View.VISIBLE);

    }

    class MyAdapter extends FragmentStatePagerAdapter {
        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            return MainActivityFactoryFragment.createFragment(position);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return CONTENT[position % CONTENT.length].toUpperCase();
        }

        @Override
        public int getCount() {
            return CONTENT.length;
        }
    }

}


 布局xml: 
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <com.viewpagerindicator.TabPageIndicator
        android:id="@+id/indicator"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:visibility="gone"
        />
    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        />

</LinearLayout>

style.xml
注意:AppTheme一定要写vpiTabPageIndicatorStyle
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <!-- 去除ActionBar阴影 -->
        <item name="android:windowContentOverlay">@null</item>
        <!-- 设置ActionBar背景色 -->
        <item name="android:actionBarStyle">@style/MyActionBar</item>
        <!-- 设置ActionBar背景色 - 兼容 -->
        <item name="actionBarStyle">@style/MyActionBar</item>

        <!-- ViewPager Indicator-->
        <item name="vpiTabPageIndicatorStyle">@style/CustomTabPageIndicator</item>
    </style>

    <!-- ActionBar属性 -->
    <style name="MyActionBar" parent="@style/Widget.AppCompat.ActionBar">
        <item name="android:background">@color/app_bg_color</item>
        <!-- Support library compatibility -->
        <item name="background">@color/app_bg_color</item>
        <!-- 高度 -->
        <item name="android:height">50dip</item>
        <!-- Support library compatibility -->
        <item name="height">50dip</item>
    </style>


    <!-- Viewpager indicator - vpiTabPageIndicatorStyle -->
    <style name="CustomTabPageIndicator" parent="Widget.TabPageIndicator">
        <!--<item name="android:background">@drawable/custom_tab_indicator</item>-->
        <!--<item name="android:textAppearance">@style/CustomTabPageIndicator.Text</item>-->
        <item name="android:textColor">#FF555555</item>
        <item name="android:textSize">16sp</item>
        <!--<item name="android:divider">@drawable/custom_tab_indicator_divider</item>-->
        <item name="android:dividerPadding">10dp</item>
        <item name="android:showDividers">middle</item>
        <item name="android:paddingLeft">8dp</item>
        <item name="android:paddingRight">8dp</item>
        <item name="android:fadingEdge">horizontal</item>
        <item name="android:fadingEdgeLength">8dp</item>
    </style>

</resources>

 
 

以上是所有代码,有注释,下面是报错:

报错一:

报错:Failed to find style ‘vpiTabPageIndicatorStyle’ in current theme
解决:在AppTheme中设置vpiTabPageIndicatorStyle

报错二:

报错:java.lang.IllegalStateException: ViewPager has not been bound
解决:将TabPageIndicator 设置为:android:visibility=“gone”,数据加载完成后再设置为visiable即可。

报错三:

报错:java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.setMenuVisibility(boolean)' on a null object reference
解决:布局一定是Fragment
<span style="color:#808000;">     </span><pre name="code" class="java">@Override
public Fragment getItem(int position) {
    return MainActivityFactoryFragment.createFragment(position);
}
 
 

报错四:

报错:java.lang.NullPointerException: Attempt to write to field 'android.support.v4.app.FragmentManagerImpl android.support.v4.app.Fragment.mFragmentManager' on a null object reference
解决:ViewPagerIndicator中Simple给的示例FragmentPagerAdapter 改成 FragmentStatePagerAdapter 即可


                                                               


你可能感兴趣的:(android,androidstudio)