子界面广告轮播代码
private int[] images = { R.drawable.lunbo_shouye1, R.drawable.lunbo_shouye2, R.drawable.lunbo_shouye3,R.drawable.lunbo_shouye4, R.drawable.lunbo_shouye5};
private List<ImageView> imageViews = new ArrayList<ImageView>();
private List<ImageView> pointIVs = new ArrayList<ImageView>();
private TopAdapter adapter;
private int currentPos = 0;
private Handler handlerTop = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
int currentItem = vp.getCurrentItem();
vp.setCurrentItem(currentItem + 1,true);
//发送延迟3s消息再次滑动到下一页
handlerTop.sendEmptyMessageDelayed(1, 3000);
break;
}
super.handleMessage(msg);
}
};
public void lunbo() {
//创建用于显示点图标的布局参数对象
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
params.leftMargin = 5;
params.rightMargin = 5;
for (int i = 0; i < images.length; i++) {
//创建将要显示到ViewPager中的ImageView对象
ImageView imageView = new ImageView(this.activity);
imageView.setBackgroundResource(images[i]);
//将下标保存到imageView的tag
imageView.setTag(i);
//设置imageView点击监听
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
//保存到list中
imageViews.add(imageView);
//创建用于显示指示点图片的ImageView对象
ImageView pointIV = new ImageView(this.activity);
//设置多状态背景图片
pointIV.setBackgroundResource(R.drawable.point_selector);
//让第一个初始显示为当前点图片, 其它显示为一般的点图片
if (i == 0) {
pointIV.setEnabled(true);
} else {
pointIV.setEnabled(false);
}
//用集合保存
pointIVs.add(pointIV);
//添加到RadioGroup中显示
ll.addView(pointIV, params);
}
//创建adapter对象
adapter = new TopAdapter(activity,imageViews);
//设置adapter显示ViewPager
vp.setAdapter(adapter);
if(handlerTop != null){
//移除之前未处理的消息
handlerTop.removeCallbacksAndMessages(null);
}
//计算ViewPager中当前Page的下标
int currentItem = Integer.MAX_VALUE / 2 - Integer.MAX_VALUE / 2 % images.length;
//初始显示到当前page
vp.setCurrentItem(currentItem);
//设置ViewPager页面改变的监听
vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
// 当当前page有变化时回调
// 1. 更新圆点图标
// 2. 更新当前文本
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
//1. 更新圆点图标
pointIVs.get(currentPos).setEnabled(false);
position = position % pointIVs.size();
pointIVs.get(position).setEnabled(true);
currentPos = position;
}
@Override
public void onPageScrollStateChanged(int state) {
if (state == ViewPager.SCROLL_STATE_DRAGGING) {
handlerTop.removeMessages(1);
} else if (state == ViewPager.SCROLL_STATE_IDLE) {
handlerTop.sendEmptyMessageDelayed(1, 3000);
} else if (state == ViewPager.SCROLL_STATE_SETTLING) {
handlerTop.removeMessages(1);
}
}
});
handlerTop.sendEmptyMessageDelayed(1, 3000);
}
public class TopAdapter extends PagerAdapter{
private Context context;
private List<ImageView> imageViews;
public TopAdapter(Context context,List<ImageView> imageViews){
this.context = context;
this.imageViews = imageViews;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
position = position % images.length;
ImageView imageView = imageViews.get(position);
container.addView(imageView);
//图片的点击事件
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, XiangQingActivity.class);
context.startActivity(intent);
}
});
return imageView;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container1, int position, Object object) {
// ((ViewGroup) container.getParent()).removeView((View) object);
container1.removeView((View) object);
}
}
①在response.sendRedirect()方法后加return语句即可,如下:
response.sendRedirect("login.jsp");
return;
②检查提交的url是否有误。
③如果你的页面中用了清缓存代码response.flushbuffer();又用到了response.sendRedirect(url);
你可以把response.flushbuffer();去掉,或者用JS的window.location.href="url";来做转向。
④如果你用了OutputStream,而web容器生成的servlet代码中有out.write(””),这个和JSP中调用的
response.getOutputStream()冲突。out.write()这个是字符流,而response.getOutputStream()
是字节流,你不能在同一个页面中调用多个输出流。无论先调用哪一个,在调用第二个时都会抛出
IllegalStateException,因为在jsp中,out变量是通过response.getWriter得到的。在多个使用了
outputStream的<%%>语句之间不能有空格及多余的字符。也就是页面中除了使用了
outputStream的<%%>之外不能有空格或其它任何字符,在之内的语句可以有空格及回车。
在JSP页面做输出的时候有两种方式.一是通过JspWriter,另一个是通过
OutputStream,但二者互相排斥.如果并存的话就会报告以上异常.
在不得不使用OutputStream的时候.我们必须要把JspWriter舍弃掉了。找到
请求异常的页面所对应的Servlet..把其中所有使用JspWriter的语句全部去掉.
或者是到你的JSP文件里把动态输出的代码注释掉.这里注意换行和空格制表符均
为JspWriter输出.应该一起去掉.保存文件重新启动服务器你会发现上述异常
消失了。
由于jsp container在处理完成请求后会调用releasePageContet方法释放
所用的PageContext object,并且同时调用getWriter方法,由于getWriter方法
与在jsp页面中使用流相关的getOutputStream方法冲突,所以会造成这种异常,
解决办法是:只需要在jsp页面的最后加上两条语句:
out.clear();
out=pageContext.pushBody();
即可(其中out,pageContext均为jsp内置对象!) 。
不是都告诉过你吗,addview之前,先把view从它的parent中移除,view不能同时拥有两个parent