在网上看到的所有android例子都是把adapter和listener写在一起,多是内部类的实现方式。我今天想把他们分离开。即adapter和listener写在一个class里面,adapter和listener在同一个class中以内部类形式存在。但是adapter在相关操作上正常,但是listener缺出现启动一个activity时null指针问题。代码如下
在一个JshopActivityIndex中我使用了viewpager控件
我先把viewpager的相关adapter和listener写在了JshopViewpagerAdapter
package com.jshop.android.widget;
import java.util.ArrayList;
import com.jshop.android.index.JshopActivityIndex;
import com.jshop.android.index.JshopMIndex;
import com.jshop.android.index.R;
import com.jshop.android.index.WelcomeAct;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.widget.ImageView;
public class JshopViewpagerAdapter extends Activity {
public class JshopActivityIndexViewpagerAdapter extends PagerAdapter {
private ArrayList<View> pageViews;
public JshopActivityIndexViewpagerAdapter() {
super();
// TODO Auto-generated constructor stub
}
/**
* 对左右滚动空间进行适配器定义和操作
*/
public JshopActivityIndexViewpagerAdapter(ArrayList<View> pv) {
this.pageViews = pv;
}
@Override
public int getCount() {
return pageViews.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public void destroyItem(View container, int position, Object object) {
((ViewPager) container).removeView(pageViews.get(position));
}
@Override
public void finishUpdate(View container) {
// TODO Auto-generated method stub
}
@Override
public Object instantiateItem(View container, int position) {
// TODO Auto-generated method stub
((ViewPager) container).addView(pageViews.get(position));
return pageViews.get(position);
}
@Override
public void setPrimaryItem(View container, int position, Object object) {
// TODO Auto-generated method stub
super.setPrimaryItem(container, position, object);
}
@Override
public void startUpdate(View container) {
// TODO Auto-generated method stub
super.startUpdate(container);
}
}
// 指引页面更改事件监听器
public class JshopActivityIndexViewpagerPageChangeListener implements OnPageChangeListener {
private Context context;
private ImageView[] imageViews;
public JshopActivityIndexViewpagerPageChangeListener(Context ctx,ImageView[] v){
this.context=ctx;
this.imageViews=v;
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int arg0) {
for (int i = 0; i < imageViews.length; i++) {
imageViews[arg0].setBackgroundResource(R.drawable.page_indicator_focused);
if (arg0 != i) {
imageViews[i].setBackgroundResource(R.drawable.page_indicator);
}
}
if(arg0==5){
Intent intent = new Intent(context,JshopMIndex.class);
startActivity(intent);
}
}
}
}
当程序执行到
if(arg0==5){
Intent intent = new Intent(context,JshopMIndex.class);
startActivity(intent);
}
启动另一个activity时候就会报错。
我是这样调用这个内部类的
viewPager.setAdapter(new JshopViewpagerAdapter().new JshopActivityIndexViewpagerAdapter(pageViews));
viewPager.setOnPageChangeListener(new JshopViewpagerAdapter().new JshopActivityIndexViewpagerPageChangeListener(JshopActivityIndex.this,imageViews));
我也在网上查到了类似问题地址是
http://stackoverflow.com/questions/6140157/startactivityforresult-null-pointer-exception-context
我心里想把adapter和listener分离,可以让activity的代码不用那么长,可是目前只能做到分离adapter。希望有高人指点下