先上效果图
例子就是最简单,就是入门的viewpager的轮播,想学习的同学也可以下载我的项目,下载地址在这
github.,里面有很详细的讲解,在自动轮播的时候加入和handler使其能够自动滚动,下面是能让viewpager能够自动滚动的代码,很简单就是获取当前的界面然后让当前的界面+1,然后发送一个空消息
android.os.Handler h=new android.os.Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int item = viewPager.getCurrentItem() + 1;
viewPager.setCurrentItem(item);//这个先写,int item后写
h.sendEmptyMessageDelayed(0, 4000);
}
};
记得还要在oncreat方法里面再次发送一个消息 h.sendEmptyMessageDelayed(0, 4000); |
然后一般做新闻客户端的详情页面的跳转都是序列化对象,然后进行Activity级别的跳转。我当时就想fragment这么好用,为啥不能用fragment啊?想了好久就果断想用点击图片转跳至fragment。这样还不用序列化对象。多方便啊,但是网上找了很久没有这方面的例子,然后下面这些代码是写在viewpager适配器中 instantiateItem这个方法中的。注意是在设置了图片数据之后才进行下面的代码。
这里讲讲以前遇到的一个bug,因为fragment是依托Activity才能存在的。所以我没有设置if(isclick)这个方法之前,只要是点击了图片然后转跳了fragment之后,在fragment上面点击几下,然后想返回原来带有viewpager的那个界面也需要点击同样的次数才能返回原来的界面。因为在fragment的下面就是Activity。虽然点击的是fragment,但是实际上点击的是fragment。
然后解决这个bug是设置了一个boolean类型的值,最开始设置为true,然后点了及fragment之后就改为false,这样在点进fragment之后就不能再点击了。然后重点来了
重点是,设置了另一个handler2,这里发空消息,空消息发的是让boolean类型为true,然后把消息发在转跳fragment中的语句中。这个办法虽然还是有缺陷,试验过在点击fragment界面很多次之后还是能返回原来的Activity界面的!!! |
以下是转跳的代码
imageView.setTag(imageaaa[realPosition]);///得到位置,某个图片的位置
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch ((int) v.getTag()) {
case R.drawable.a:
if (isclick) {
h.removeCallbacksAndMessages(null);
getSupportFragmentManager().
beginTransaction().
//如果不加下面这个语句是直接退出的!!!!
addToBackStack(null).
replace(R.id.aaa, new newfragment()).
commit();
isclick=false;
Log.e("第一次的情况"," "+isclick);
h2.sendEmptyMessageDelayed(0,4000);
}
Log.e("发了消息之后情况"," "+isclick);
break;
case R.drawable.b:
if (isclick) {
Log.e("第二个fragment开始", isclick + " ");
getSupportFragmentManager().
beginTransaction().
addToBackStack(null).
replace(R.id.aaa, new newfragment1()).
commit();
isclick=false;
}
Log.e("第二个fragment结束", isclick + " ");
break;
case R.drawable.c:
if (isclick) {
getSupportFragmentManager().
beginTransaction().
addToBackStack(null).
replace(R.id.aaa, new newfragment2()).
commit();
isclick=false;
}
break;
case R.drawable.d:
if (isclick) {
getSupportFragmentManager().
beginTransaction().
addToBackStack(null).
replace(R.id.aaa, new newfragment3()).
commit();
isclick=false;
}
break;
}
}
});
详细的viewpager的轮播在我的代码中都有,还望大家多多指教
下载地址 github.