【已解决】 参照教程写的轮播图在结合底部导航栏后无法显示
参照教程写的轮播图在结合底部导航栏后无法显示,之前可以实现轮播图

public class HomeActivity extends FragmentActivity implements MyViewPager.OnViewPagerTouchListener
, ViewPager.OnPageChangeListener {
// 1.点击底部tab进行上面空白区域的Fragment的切换实现
// 2.点击底部tab实现tab颜色变化的实现(选中项为蓝色,其他项为灰色)
private ViewPager viewPager;
View view;
private MyViewPager mLoopPager;
private LoopPagerAdapter mLoopPagerAdapter;
private static List<Integer> sPics = new ArrayList<>();
private Handler mHandler;
private Boolean mFlag = false;
static {
sPics.add(R.drawable.pic1);
sPics.add(R.drawable.pic2);
sPics.add(R.drawable.pic3);
sPics.add(R.drawable.pic4);
sPics.add(R.drawable.pic5);
}
ImageView mImageView1, mImageView2, mImageView3, mImageView4;
int len = 4;
ImageView[] imageViews = new ImageView[len];
FragmentManager fm = getSupportFragmentManager();
private LinearLayout pointContainer;
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
mImageView1 = findViewById(R.id.iv1);
mImageView2 = findViewById(R.id.iv2);
mImageView3 = findViewById(R.id.iv3);
mImageView4 = findViewById(R.id.iv4);
imageViews[0] = mImageView1;
imageViews[1] = mImageView2;
imageViews[2] = mImageView3;
imageViews[3] = mImageView4;
for (int i = 0; i < imageViews.length; i++) {
final int j = i;
imageViews[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showTab(j);
}
});
}
// 默认第一项处于被选中状态
showTab(0);
initView();
mHandler = new Handler();
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
mHandler.post(mLoopTask);
}
@Override
public void onDetachedFromWindow() {
super.onDetachedFromWindow();
mHandler.removeCallbacks(mLoopTask);
}
private Runnable mLoopTask = new Runnable() {
@Override
public void run() {
if (!mFlag) {
int currentItem = mLoopPager.getCurrentItem();
mLoopPager.setCurrentItem(++currentItem, true);
}
mHandler.postDelayed(this, 3000);
}
};
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
private void initView() {
view = getLayoutInflater().inflate(R.layout.fragment_home, null);
mLoopPager = (MyViewPager) view.findViewById(R.id.loop);
if (mLoopPager == null) {
Log.e("main", "1 should not be null");
}
//设置适配器
mLoopPagerAdapter = new LoopPagerAdapter();
mLoopPagerAdapter.setData(sPics);
if (mLoopPagerAdapter == null) {
Log.e("main", "2 should not be null");
}
mLoopPager.setAdapter(mLoopPagerAdapter);
mLoopPager.setOnViewPagerListener(this);
mLoopPager.addOnPageChangeListener((ViewPager.OnPageChangeListener) this);
//根据图片的个数去添加点的个数
View view2 = /*getLayoutInflater().*/View.inflate(this, R.layout.fragment_home, null);
pointContainer = (LinearLayout) view2.findViewById(R.id.points);
//pointContainer = (LinearLayout) this.findViewById(R.id.points);
InsertPoint();
mLoopPager.setCurrentItem(100 * sPics.size() - 1, false);
}
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
private void InsertPoint() {
for (int i = 0; i < sPics.size(); i++) {
View point = new View(this);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(40, 40);
layoutParams.leftMargin = 20;
point.setBackground(getResources().getDrawable(R.drawable.normal_point));
point.setLayoutParams(layoutParams);
if (pointContainer == null) {
Log.e("main", "p should not be null");
}
pointContainer.addView(point);
}
}
@Override
public void onPagerTouch(Boolean isTouch) {
mFlag = isTouch;
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
//viewPager停下来时的点位置
int realPos;
if (mLoopPagerAdapter.getDataRealSize() != 0) {
realPos = position % mLoopPagerAdapter.getDataRealSize();
} else {
realPos = 0;
}
setSelectPoint(realPos);
}
private void setSelectPoint(int realPos) {
for (int i = 0; i < pointContainer.getChildCount(); i++) {
View point = pointContainer.getChildAt(i);
if (i != realPos) {
point.setBackgroundResource(R.drawable.normal_point);
} else {
point.setBackgroundResource(R.drawable.select_point);
}
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
// 1.点击底部tab进行上面空白区域的Fragment的切换实现
// 1.创建Fragment,对Fragment进行标记,以便后面进行复用
// 1.创建Fragment之前要考虑一点的是,是复用还是创建
// 2.当从当前Fragment再次切换回原来的Fragment的时候,又或者是新的Fragment
// 对原来的Fragment进行复用显示,对其余的Fragment进行隐藏
// 对新的Fragment进行显示,对其余的Fragment进行隐藏
// 2.点击底部tab实现tab颜色变化的实现(选中项为蓝色,其他项为灰色)
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
private void showTab(int index) {
Fragment fragment = fm.findFragmentByTag("tag" + index);
Log.e("showTab--fragment---", "tag:" + "tag" + index + fragment);
// 创建Fragment
// isAdded:如果改fragment添加到Activity中,则返回为true
if (null == fragment || !fragment.isAdded()) {
// 如果点击对应的Fragment未创建则创建,反之则复用
fragment = createFragment(index);
}
// 将除去当前的其他Fragment进行隐藏处理
hideFragment(fragment);
// 对当前的Fragment进行显示处理
showFragment(fragment);
changeTabColor(index);
}
private void showFragment(Fragment fragment) {
Log.e("showFragment-fment-", "" + fragment);
FragmentTransaction ft = fm.beginTransaction();
ft.show(fragment);
ft.commitAllowingStateLoss();
//Fragment对用户可见
fragment.setUserVisibleHint(true);
}
private void hideFragment(Fragment fragment) {
for (int i = 0; i < imageViews.length; i++) {
Fragment fment = null;
FragmentTransaction ft = fm.beginTransaction();
fment = fm.findFragmentByTag("tag" + i);
Log.e("hiedFragment-fment-", "" + fment);
// 隐藏的条件:
// 1.Fragment存在
// 2.不是当前的Fragment
if (fment != null && fment.isAdded() && fment != fragment) {
ft.hide(fment);
ft.commitAllowingStateLoss();
// Fragment对用户不可见
fment.setUserVisibleHint(false);
}
}
}
// 创建Fragment
private Fragment createFragment(int index) {
fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Fragment fragment = null;
switch (index) {
case 0:
fragment = new HomeFragment();
break;
case 1:
fragment = new FindFragment();
break;
case 2:
fragment = new CartFragment();
break;
case 3:
fragment = new MineFragment();
break;
}
ft.add(R.id.lin, fragment, "tag" + index);
ft.commitAllowingStateLoss();
Log.e("create-fragment-", "tag:" + "tag" + index + fragment);
return fragment;
}
// 2.点击底部tab实现tab颜色变化的实现(选中项为蓝色,其他项为灰色)
private void changeTabColor(int index) {
for (int i = 0; i < imageViews.length; i++) {
// 那当前tab的下标和所有的tab下标进行匹配判断,如果匹配上则是选中项,如果没有匹配上则是未选中项
if (index == i) {
imageViews[i].setBackgroundColor(getResources().getColor(R.color.yellow));
} else {
imageViews[i].setBackgroundColor(getResources().getColor(R.color.white));
}
}
}
}
参照教程写的轮播图在结合底部导航栏后无法显示,之前可以实现轮播图
我这么拆解吧,第一个是轮播图,第二个是tab+viewPager去切换fragment。
我理解大概是这样的功能你要实现的。
那不如你先去学习轮播图的实现,这个我们的视频就有,就单独做这个。
如果你学习fragment的切换,你可以去学习领券联盟的项目,里面就有。
把领券联盟做完了,基本上是茅厕顿开了。