android 为啥父类不闪退,但我重新写了个子类后,程序闪退?

求教各位大神,下面的是我的一个ViewPager的安卓小程序,如大家所见现在这个android代码是能正常运行的,但当我将代码中所有父类 ”ViewPager“ 换成 子类
”NoScrollViewPager“ 后,程序一打开就闪退。。。

为啥换了个子类就会闪退啊。。。

package com.example.testviewpagerandtabhost;

public class MainActivity extends Activity {

Context context = null;
LocalActivityManager manager = null;
ViewPager pager = null;
TabHost tabHost = null;
TextView t1,t2,t3;

private int offset = 0;// 动画图片偏移量
private int currIndex = 0;// 当前页卡编号
private int bmpW;// 动画图片宽度
private ImageView cursor;// 动画图片

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    context = MainActivity.this;
    manager = new LocalActivityManager(this , true);
    manager.dispatchCreate(savedInstanceState);

    InitImageView();
    initTextView();
    initPagerViewer();

}
/**
 * 初始化标题
 */
private void initTextView() {
    t1 = (TextView) findViewById(R.id.text1);
    t2 = (TextView) findViewById(R.id.text2);
    t3 = (TextView) findViewById(R.id.text3);

    t1.setOnClickListener(new MyOnClickListener(0));
    t2.setOnClickListener(new MyOnClickListener(1));
    t3.setOnClickListener(new MyOnClickListener(2));

}
/**
 * 初始化PageViewer
 */
private void initPagerViewer() {
    pager = ((ViewPager) findViewById(R.id.viewpage));
    final ArrayList<View> list = new ArrayList<View>();
    Intent intent = new Intent(context, A.class);
    list.add(getView("A", intent));
    Intent intent2 = new Intent(context, B.class);
    list.add(getView("B", intent2));
    Intent intent3 = new Intent(context, C.class);
    list.add(getView("C", intent3));

    pager.setAdapter(new MyPagerAdapter(list));
    pager.setCurrentItem(0);
    pager.setOnPageChangeListener(new MyOnPageChangeListener());
}
/**
 * 初始化动画
 */
private void InitImageView() {
    cursor = (ImageView) findViewById(R.id.cursor);
    bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.roller)
    .getWidth();// 获取图片宽度
    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    int screenW = dm.widthPixels;// 获取分辨率宽度
    offset = (screenW / 3 - bmpW) / 2;// 计算偏移量
    Matrix matrix = new Matrix();
    matrix.postTranslate(offset, 0);
    cursor.setImageMatrix(matrix);// 设置动画初始位置
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}
/**
 * 通过activity获取视图
 * @param id
 * @param intent
 * @return
 */
private View getView(String id, Intent intent) {
    return manager.startActivity(id, intent).getDecorView();
}

/**
 * Pager适配器
 */
public class MyPagerAdapter extends PagerAdapter{
    List<View> list =  new ArrayList<View>();
    public MyPagerAdapter(ArrayList<View> list) {
        this.list = list;
    }

    @Override
    public void destroyItem(ViewGroup container, int position,
            Object object) {
        ViewPager pViewPager = ((ViewPager) container);
        pViewPager.removeView(list.get(position));
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == arg1;
    }

    @Override
    public int getCount() {
        return list.size();
    }
    @Override
    public Object instantiateItem(View arg0, int arg1) {
        ViewPager pViewPager = ((ViewPager) arg0);
        pViewPager.addView(list.get(arg1));
        return list.get(arg1);
    }

    @Override
    public void restoreState(Parcelable arg0, ClassLoader arg1) {

    }

    @Override
    public Parcelable saveState() {
        return null;
    }

    @Override
    public void startUpdate(View arg0) {
    }
}
/**
 * 页卡切换监听
 */
public class MyOnPageChangeListener implements OnPageChangeListener {

    int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量
    int two = one * 2;// 页卡1 -> 页卡3 偏移量

    @Override
    public void onPageSelected(int arg0) {
        Animation animation = null;
        switch (arg0) {
        case 0:
            if (currIndex == 1) {
                animation = new TranslateAnimation(one, 0, 0, 0);
            } else if (currIndex == 2) {
                animation = new TranslateAnimation(two, 0, 0, 0);
            }
            break;
        case 1:
            if (currIndex == 0) {
                animation = new TranslateAnimation(0, one, 0, 0);
            } else if (currIndex == 2) {
                animation = new TranslateAnimation(two, one, 0, 0); 
            }
            break;
        case 2:
            if (currIndex == 0) {
                animation = new TranslateAnimation(0, two, 0, 0);
            } else if (currIndex == 1) {
                animation = new TranslateAnimation(one, two, 0, 0);
            }
            break;
        }
        currIndex = arg0;
        animation.setFillAfter(true);// True:图片停在动画结束位置
        animation.setDuration(300);
        cursor.startAnimation(animation);
    }

    @Override
    public void onPageScrollStateChanged(int arg0) {

    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {

    }
}
/**
 * 头标点击监听
 */
public class MyOnClickListener implements View.OnClickListener {
    private int index = 0;

    public MyOnClickListener(int i) {
        index = i;
    }

    @Override
    public void onClick(View v) {
        pager.setCurrentItem(index);
    }
};








public class NoScrollViewPager extends ViewPager { 

    public NoScrollViewPager(Context context) {
        super(context);
        // TODO 自动生成的构造函数存根
    }

    private boolean noScroll = false;  



    public void setNoScroll(boolean noScroll) {  
        this.noScroll = noScroll;  
    }  

    @Override  
    public void scrollTo(int x, int y) {  
        super.scrollTo(x, y);  
    }  

    @Override  
    public boolean onTouchEvent(MotionEvent arg0) {  
        /* return false;//super.onTouchEvent(arg0); */  
        if (noScroll)  
            return false;  
        else  
            return super.onTouchEvent(arg0);  
    }  

    @Override  
    public boolean onInterceptTouchEvent(MotionEvent arg0) {  
        if (noScroll)  
            return false;  
        else  
            return super.onInterceptTouchEvent(arg0);  
    }  

    @Override  
    public void setCurrentItem(int item, boolean smoothScroll) {  
        super.setCurrentItem(item, smoothScroll);  
    }  

    @Override  
    public void setCurrentItem(int item) {  
        super.setCurrentItem(item);  
    }  

}  

}

4个回答

1、子类可以转换成父类,但父类没法转化成子类。把xml定义的viewpage改成你的子类定义。

quincyHammond
CaoNiMaBiBBBBB 。。。 其实这个基础语法我学过的。。。只是忘了而已~~~~(>_<)~~~~
4 年多之前 回复
quincyHammond
CaoNiMaBiBBBBB 大二狗 学了安卓的 XML,又忘了 Java 啦~\(≧▽≦)/~ 真是学得快忘得快。。。
4 年多之前 回复
quincyHammond
CaoNiMaBiBBBBB 。。。(∩_∩) 好吧,弄好了。。。原来问题是出在一个 JAVA 文件只能有一个 public class。。。 大二学生现在才想起这个最基础的语法。。。而且还是老师第一节课教的
4 年多之前 回复
quincyHammond
CaoNiMaBiBBBBB 。。。。。。。
4 年多之前 回复
quincyHammond
CaoNiMaBiBBBBB 回复danielinbiti: (⊙o⊙)哦,难道某些特殊的内部类可以在类内定义?。。。这些就是“内部类”么。。。
4 年多之前 回复
quincyHammond
CaoNiMaBiBBBBB 回复danielinbiti: 可是你看,上面的 public class MyOnPageChangeListener,public class MyOnClickListener ,好多都是 public class啊。。。而且一直在同一个文件里,之前运行时也没有任何问题啊
4 年多之前 回复
danielinbiti
danielinbiti 回复quincyHammond: 一个java文件里只能有一个public class。不会上面代码你是在一个文件里吧。如果是,看看基础语法再弄吧。
4 年多之前 回复
quincyHammond
CaoNiMaBiBBBBB 回复danielinbiti: 所以问题就是,能成功编译但不能运行。。。
4 年多之前 回复
quincyHammond
CaoNiMaBiBBBBB 。。。但是编译完了,一到手机上,软件刚打开就闪退啊。。。( ⊙ o ⊙ )。。。显示“XXX已停止运行”
4 年多之前 回复
quincyHammond
CaoNiMaBiBBBBB 回复danielinbiti: 哇哇哇,快哭了。。。岂止是能进去啊,根本就是能正常编译
4 年多之前 回复
quincyHammond
CaoNiMaBiBBBBB 。。。我感觉你在安卓方面,应该挺厉害的,如果方便的话,可以帮忙看看源代码吗? 也就上面这几行,不多。。。。加我QQ 2560190613,我把整个项目包发给你(加Q 注明 CSDN论坛)~
4 年多之前 回复
danielinbiti
danielinbiti 回复quincyHammond: 调试的时候MainActivity 的onCreate方法能进去吗
4 年多之前 回复
quincyHammond
CaoNiMaBiBBBBB 。。。只要最下面那个 "NoScrollViewPager" 类删掉,是完全可以正常运行的
4 年多之前 回复
quincyHammond
CaoNiMaBiBBBBB 如你所见,这个程序 总共 也就上面这几行的代码 ╮(╯_╰)╭ 一眼就能看完,而且源代码都是从CSDN下载的,只要不改子类是完全可以正常运行的
4 年多之前 回复
quincyHammond
CaoNiMaBiBBBBB 。。。。我都快哭了。。。这个问题困扰我好几天了,过个好年都没心情了 ╮(╯_╰)╭
4 年多之前 回复
danielinbiti
danielinbiti 回复quincyHammond: onCreate能进去吗
4 年多之前 回复
quincyHammond
CaoNiMaBiBBBBB 那个。。。刚才我试了一下你说的方法。。。不仅在 JAVA 文件里,将所有 “ViewPager”改成"NoScrollViewPager",而且 在 XML 文件里也已经将 <android.support.v4.view.ViewPager 改成 <com.example.testviewpagerandtabhost.NoScrollViewPager 了,可还是闪退
4 年多之前 回复
quincyHammond
CaoNiMaBiBBBBB 而且 我也没有用过 ListView 啊。。。这应该和 ListView 没关系吧。。。
4 年多之前 回复
quincyHammond
CaoNiMaBiBBBBB 可是。。。点开这个链接,里面连个“最佳答案”都没有。。。
4 年多之前 回复

可是。。。点开这个链接,里面连个“最佳答案”都没有。。。

而且 我也没有用过 ListView 啊。。。这应该和 ListView 没关系吧。。。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!