老师 viewpager冲突怎么解决?
老师 请问我用vierpager做了TabHome 在fragment里有添加了viewPager做广告页
fragment里viewpager 滑动到最后页的时候继续滑动就把tab也滑动了 冲突怎么解决啊
正在回答 回答被采纳积分+1
如果你只想广告轮播效果,可以有更简便的处理,使用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); }
没有滑动到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;
}
}
- 参与学习 人
- 提交作业 307 份
- 解答问题 1613 个
本专题是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理。介绍了Android内外部文件存储、轻量级数据库SQLite的使用。利用屏幕适配、状态保持、百度地图解决实际问题。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星