您的位置:首页 > 其它

viewpager图片广告条点击转跳fragment-----【轮播图点击转跳详情界面】

2017-05-25 18:56 471 查看
先上效果图



例子就是最简单,就是入门的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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐