老师 viewpager冲突怎么解决?

老师 viewpager冲突怎么解决?

老师 请问我用vierpager做了TabHome 在fragment里有添加了viewPager做广告页

fragment里viewpager 滑动到最后页的时候继续滑动就把tab也滑动了 冲突怎么解决啊

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
irista23 2018-01-12 13:51:15

如果你只想广告轮播效果,可以有更简便的处理,使用BannerView(网上第三方的),就避免了ViewPager的嵌套和复杂处理,只要在gradle中添加:

compile 'com.coldmoqiuli:banners:1.0.0'

在对应打开的Fragment布局中添加:

<com.oragee.banners.BannerView
    android:id="@+id/banner"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:layout_centerInParent="true"
    android:gravity="center" />

参考我给你编写的fragment中的代码:

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_test, null);
    BannerView bannerView = view.findViewById(R.id.banner);
    setImageList();
    bannerView.setViewList(viewList);
    bannerView.startLoop(true);
    return view;
}
private void setImageList() {
    viewList=new ArrayList<>();
    ImageView iv1 = new ImageView(getActivity());
    iv1.setImageResource(R.drawable.meeting);
    viewList.add(iv1);
    ImageView iv2 = new ImageView(getActivity());
    iv2.setImageResource(R.drawable.office);
    viewList.add(iv2);
    ImageView iv3 = new ImageView(getActivity());
    iv3.setImageResource(R.drawable.visitor);
    viewList.add(iv3);
}


  • 提问者 mengliu #1
    老师 这个依赖添加了以后报错 运行部起来 Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 17 declared in library [com.coldmoqiuli:banners:1.0.0] C:\Users\Administrator\AndroidStudioProjects\ViewPager2\app\build\intermediates\exploded-aar\com.coldmoqiuli\banners\1.0.0\AndroidManifest.xml Suggestion: use tools:overrideLibrary="com.oragee.banners" to force usage
    2018-01-13 10:14:06
  • irista23 回复 提问者 mengliu #2
    把gradle里的minSdkVersion 15改成17
    2018-01-13 23:15:53
提问者 mengliu 2018-01-12 08:13:45

没有滑动到tab 确实是在banner滑动的 

我贴下代码 


package com.imooci.com.viewpager;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TabHost;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements TabHost.TabContentFactory{
   //定义TabHst
   private TabHost mTabHost;

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



       //获取到TabHost
       mTabHost = (TabHost) findViewById(R.id.main_tab);
       //初始化
       mTabHost.setup();
       //创建tab的title数据
       int titleIDs[] = {
               R.string.home,
               R.string.message,
               R.string.me
       };
       //创建tab的图片ID数据
       int drawableIDs[] ={
               R.drawable.color_main_tab_home,
               R.drawable.color_main_tab_msg,
               R.drawable.color_main_tab_my
       };
       //把数据填充到视图中
       for (int i = 0; i <titleIDs.length ; i++) {
           //获取到布局
          View view = getLayoutInflater().inflate(R.layout.tab_item,null);
           //获取到ui组件
           ImageView icon = (ImageView) view.findViewById(R.id.tab_icon);
           TextView title = (TextView) view.findViewById(R.id.tab_text);
           View tab = view.findViewById(R.id.tab_bg);
           //设置图片
           icon.setImageResource(drawableIDs[i]);
           //设置标题
           title.setText(titleIDs[i]);
           //设置背景颜色
           //tab.setBackgroundColor(getResources().getColor(R.color.white));
           //添加到布局当中
           mTabHost.addTab(mTabHost
                   .newTabSpec(getString(titleIDs[i]))
                   .setIndicator(view)
                   .setContent(this)

           );
       }


//------------------------------------------------------------

       //创建三个Fragement的数组
       final Fragment[] fragments = {
               IndexFragment.getInstance("index"),
               MsgFragment.getInstance("message"),
               MyFragment.getInstance("my")
       };
       //获取viewPager
       final ViewPager mViewPager = (ViewPager) findViewById(R.id.viewPager);
       //设置Adapter
       //填充参数 getSupportFragmentManager()
       mViewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
           //添加数据
           @Override
           public Fragment getItem(int position) {
               return fragments[position];
           }
           //有多少页面
           @Override
           public int getCount() {
               return fragments.length;
           }
       });


       //设置viewpager的切换的时候切换Tab
       mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
           @Override
           public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

           }

           @Override
           public void onPageSelected(int position) {
               //当TabHost不为空的时候
               if(mTabHost != null){
                   //设置mTabHost选中的选项
                   mTabHost.setCurrentTab(position);
               }

           }

           @Override
           public void onPageScrollStateChanged(int state) {

           }
       });
       //设置Tab切换的时候切换vierPager
       mTabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
           @Override
           public void onTabChanged(String s) {
               //获取当前tab的id值
               int position = mTabHost.getCurrentTab();
               //设置viewpager选中的页面
               mViewPager.setCurrentItem(position);
           }
       });


   }


   @Override
   public View createTabContent(String s) {
       View view = new View(this);
       view.setMinimumWidth(0);
       view.setMinimumHeight(0);
       return view;
   }
}


以上是tab页面 我在 IndexFragment.getInstance("index") 里又嵌套了一个viewpager


package com.imooci.com.viewpager;


import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

/**
* Created by Administrator on 2018/1/9 0009.
*/
public class IndexFragment extends Fragment {
   private Button mButton;
   //定义一个常量接收从外界传递过来的值
   private String string;
   //主页的viewPager
   private ViewPager mViewPager;
   //banner的结合
   private List<View> bannerData;
   //图片数组
   private int[] data ={
           R.drawable.banner1,
           R.drawable.banner2,
           R.drawable.banner3,
           R.drawable.banner4
   };

  private Context mContext;

   //自定义一个静态方法  返回这个类的实例化实体 类似于单利模式 接收传递过来的参数用bundle的方式将数据传递给
   public static IndexFragment getInstance(String text){
       //实例化自身
       IndexFragment indexFragment = new IndexFragment();
       //实例化一个bundle
       Bundle mBundel = new Bundle();
       //把数据添加到bundle中
       mBundel.putString("STRING",text);
       //利用setArguments 把bundle设置到缓存
       indexFragment.setArguments(mBundel);
       return indexFragment;
   }

   //创建onCreate方法接收Bundle的数值
   @Override
   public void onCreate(@Nullable Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       //如果getArguments不为空 就取出值
       if (getArguments() !=null){
          string  = getArguments().getString("STRING");
       }

   }

   @Nullable
   @Override
   public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

       View view = inflater.inflate(R.layout.index,null);
       //将接收的过来的值 传递到view中
       mButton = (Button) view.findViewById(R.id.button);
       mButton.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               Intent intent = new Intent();
               intent.setClass(getContext(),Main2Activity.class);
               startActivity(intent);
           }
       });

       //创建banner的数据
       bannerData = new ArrayList<>();
       for (int i = 0; i <data.length ; i++) {
           ImageView banner = new ImageView(getContext());
           banner.setImageResource(data[i]);
           banner.setScaleType(ImageView.ScaleType.CENTER_CROP);
           bannerData.add(banner);
        }
       mViewPager = (ViewPager) view.findViewById(R.id.banner);

       mViewPager.setAdapter(new PagerAdapter() {
           //设置条数
           @Override
           public int getCount() {
               return bannerData.size();
           }
           //判断当前view是否与传递过来的是否一致
           @Override
           public boolean isViewFromObject(View view, Object object) {
               return view == object;
           }

           @Override
           public Object instantiateItem(ViewGroup container, int position) {
               View child2 = bannerData.get(position);
               container.addView(child2);
               return child2;
           }

           @Override
           public void destroyItem(ViewGroup container, int position, Object object) {
               container.removeView(bannerData.get(position));
           }
       });


       return view;
   }


}










  • 你tab中的标签超过三个,如果一个界面显示不下,是要带滑动效果的。如果你不想让viewpager滑动,也可以重写ViewPager的onInterceptTouchEvent(MotionEvent arg0)方法和onTouchEvent(MotionEvent arg0)方法,将返回值改为false
    2018-01-12 10:07:37
  • 提问者 mengliu 回复 irista23 #2
    不是老师,您理解错了。是我在fragment里添加的ViewPager做banner图 但是当banner图滑动到最后一页的时候,不是停止,而是影响了tab的viewpager 切换了fragment 我是想问下 怎样可以不互相影响
    2018-01-12 10:20:20
Tender10 2018-01-10 16:14:36

你是不是滑动到最后滑动到了tab。如果不是你把代码贴一下,便于更精确的帮你解决问题。

  • 提问者 mengliu #1
    老师 我贴上了代码 你看一下 这个问答不能传包
    2018-01-12 08:14:41
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Android网络操作与数据存储2018版
  • 参与学习           人
  • 提交作业       307    份
  • 解答问题       1613    个

本专题是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理。介绍了Android内外部文件存储、轻量级数据库SQLite的使用。利用屏幕适配、状态保持、百度地图解决实际问题。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师