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);  
    }  

}  

}

0

4个回答

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

1
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 年多之前 回复
1
quincyHammond
CaoNiMaBiBBBBB 而且 我也没有用过 ListView 啊。。。这应该和 ListView 没关系吧。。。
4 年多之前 回复
quincyHammond
CaoNiMaBiBBBBB 可是。。。点开这个链接,里面连个“最佳答案”都没有。。。
4 年多之前 回复

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

0

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

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
android 运行项目闪退
android 项目运行闪退,一些原因是布局文件里的一些控件与android的SDK的版本不相匹配,需要我们更换android的SDK的版本,更换低一些的版本
android app调试没问题,但打包签名的apk,运行时出现闪退怎么办?
在用Eclipse编写android app时,有时调试时没有问题,但一经打包签名,运行就出现闪退,还报错说找不到某某类。一开始以为是混淆导致的,后来我没有混淆竟然也还是这个问题。无奈只得网上寻找解决方案,最终还是有人解决了的,方法也很简单,只需按照下面几步来就可以了:rnrn1.找到Project -> Build Automatically,取消它关闭自动编译rn2.然后Clean一下rn3.
android studio 签名遇到的坑(apk无法安装,安装后闪退)
签名遇到的坑
jeb2支持动态调试,测试OK外加smali转JAVA工具
Android分析神器Jeb2,关键是不闪退.Android分析神器Jeb2,关键是不闪退
[JAVA]重写父类方法并向上转型时的初始化问题
由“如何模仿安卓的Activity,设计一个父类,使得对象被创建(调用)时某些周期函数依次被调用,且该性质不因子类的重写而被破坏。”引发的问题。
Android开发中存在的闪退、及解决状态
1:浏览器闪退rnrnrn原因:浏览器中开启了缩小放大按钮(ZoomController),在开始进入浏览器时,缩小放大按钮会出现,并在一段时间后渐变消失,当在它完全消失前退出浏览器,在一些android系统上回出现异常,且此异常无法try/catch。rnrnrn解决办法:如下rnrnrn @Overridernprotected void onDestroy() {rn    if (webv
继承自AppCompatActivity崩溃闪退问题定位
继承自AppCompatActivity崩溃闪退问题定位rnrn最近调试权限问题,建了一个项目,开始没有选择支持AppCompatActivity,后续自己添加,发现总是闪退Sending signal. PID: 4546 SIG: 9,定位了很久。如下解决的rnrnrn1、比如下面的acitivy,新增继承自AppCompatActivityrnrnpublic class Main3Acti
Android studio 调试时,出现错误闪退,但是控制台没有打印错误信息
解决途径:rn可以监视一下 RuntimeInit.UncaughtHandler 这个类的uncaughtException这个方法rnrnrn贴上代码给予参考rn/*n * Copyright (C) 2006 The Android Open Source Projectn *n * Licensed under the Apache License, Version 2.0 (the "L
继承父类并继承父类的控件
rn在Flex当中,如果父类已经拥有了子元素,然后你再继承这个父类,并且在子类当中也定义了mxml的标签元素,那么将会只显示子类的mxml标签元素而不会显示父类的mxml标签元素。rn当然你可以重写createChildren方法,然后把你要显示的子元素以代码形式添加,这样绝对可以把父类的元素全部继承下来。但是为什么写标签形式就不行呢?rn我们仔细窥探一下,发现用mxml标签形式写的时候,flex...
Android中破解应用签名校验的后续问题处理方案(闪退和重启现象以及无效问题)
一、前言之前已经写了一个爆破签名校验的工具kstools,很多同学也在使用,但是也反馈了不少问题,之前一篇文章也介绍了,关于爆破之后第三方登录问题修复,这篇我们在综合说明一下一些后遗症问题,关于kstools工具说明以及工具的原理,可以看这篇文章说明:Android中自动爆破签名工具kstools说明。二、样本分析下面开始进入正题吧,关于有些同学反馈,使用该kstools爆破某app之后,出现无限
Android切换语言程序闪退,需要避免Activity重启
搜索了一下相关的资料,http://blog.sina.com.cn/s/blog_629712650101a1o3.html 说是因为4.2中,app配置了configChanges locale属性后,当app处于后台,并没有finish时,如果改变语言,并不会在resume时调用Activity重写的onConfigurationChanged函数。nn原因是,4.2增加了一个layoutD...
Android中造成APP闪退的原因总结
1. 网络异常引起的nn2. APP中访问网络的地方,组件中的ImageView没有正常的下载并显示到app 页面上。nn3.APP的sdk和手机的系统不兼容。nn4.拍照/选择图片后闪退:①手机内存小②部分手机在使用相机拍照时候存在横竖屏切换,可能会导致我们应用重新调整生命周期.解决办法:在使用到拍照功能的Activity设置:android:configChanges=&quot;orientation...
android 7.0调用相机闪退问题
解决方法一:rnrnIntent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);nFile file = new File(MyApplication.getFileDir(getActivity()), String.valueOf(System.currentTimeMillis()) + ".jpg");npat
从JVM角度看为什么子类不能重写父类静态方法
我们要解释的是什么问题呢?public class A extends B{n public static void f() {n System.out.println("com.sdkd.A.f()");n } public static void main(String[] args) {n A.f();n }n}class B {n p
Android闪退原因
自学Android开发到现在,发现的几个Android闪退的原因:1)权限问题,一般是AndroidManifest文件中忘记配置相关权限。2)在用AS开发Android程序时,涉及到Android真机版本,在生成APK文件时,如果没有把V1,V2全部勾选,可能会出现闪退。3)页面布局不合理,之前遇到的是用了LinearLayout布局,但是忘记指定orientation,出现了闪退。
android--as下,apk调试运行OK,在手机上安装apk却出现闪退的解决办法
依次选择工具栏上的:Build->Build APK.
点击按钮app闪退
1、activity在清单中没有注册;rnrn2、activity加载布局有错误;rnrn3、xml布局有错误;rnrn4、加载的控件有错误。
Android Thread导致闪退的一个小问题
       不仅仅是setText不能放在Thread里面,而且Toast.makeText也不行。
新手学习Android Studio真机运行闪退,没有报错,求大佬
按照书上写的一个登录欢迎界面,但是真机调试会闪退nWelcomeActivity.java代码nimport android.content.Intent;nimport android.os.Bundle;nimport android.support.v7.app.AppCompatActivity;nimport android.view.View;nimport android.widge...
获取单选按钮方法不对导致程序闪退
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"n xmlns:tools="http://schemas.android.com/tools"n android:layout_width="match_parent"n android:layout_height="match_p
Android程序运行秒退的一部分原因
1.活动未注册rn2. .xml文件缺少以下两行代码:rnxmlns:tools="http://schemas.android.com/tools"rnrntools:context="com.example.thethird.MainActivity"rnrnrnrn暂时只遇到这两种原因,之后碰到再加入。
Android 让程序闪退的方法
android.os.Process.killProcess(android.os.Process.myPid());
开发app在android6.0运行直接退出解决
随着android系统的不断更新、优化,Android6.0带来了新的权限管理方式,Android 6.0中权限分为两种,普通权限和危险权限(即运行时权限,下面统称运行时权限)。n当小于Android6.0时,开发app所需的权限只需在应用manifest中申明所需要的权限即可,但是android6.0需要分开申明,在应用manifest中只申明普通权限,系统会自动授予这些权限;如果对android
安卓apk打包后安装就后运行就闪退,直接run在手机正常
Android调试时apk可运行,导出签名的apk后闪退rnrn这个问题困扰了我好几天,网上查了好多资料,也没找到办法。rnrn在这个apk导出时未使用混淆,在网上查了好多资料都说跟混淆有关。rn我的项目引入jar如下:rnrnrnrnrn还有另外两个库rnrnrnrnrnrnrn结果用Android Tools 签名打包后,能顺利安装,启动后提示“XXX 已停止运行”;rnrn逛了好多论坛和博客
android点击按扭闪退
今天做常用ui组件练习时,发现我的button一点就闪退。。rn我是在xml文件中,对Button对象设置了onclick属性。找了好多资料,网上说的是因为不同的android版本造成的布局冲突问题,好像很有道理,可是没能解决我的问题。。rn最后,我发现是我的对应方法中,没有形参传入,好尴尬。。。rnrnrnrnrnrnrnrnrn
java类中子类重写父类中的方法,父类对象用子类对象实例化以后,父类的引用如何调用父类中的被重写方法。
多态的体现。nn代码如下;nnnpackage TestMENG;nnpublic class Base {n int i = 99;nn public void amethod() {n System.out.println(" Base.amethod() ");n }nn Base() {n amethod();n }nn}nnnnnpackage TestMENG;nnpublic c...
安卓打包后的apk安装后闪退解决策略
安卓项目eclipse可在手机上调试安装运行,无问题,但是签名打包后的apk,安装完后一打开即闪退我是用adb 来调试adb install -r 应用.apk安装完后点击运行应用先adb logcat -c清除之前系统日志然后adb logcat -d 打印出具体日志,然后就是找闪退原因啦我这边错误的原因是说一个类无法找到,导致闪退最后解决方案是: nproject->clean项目,重新打包即可
例题:子类重写父类方法后的调用规则
例题:nnn(单选题) 下面代码的输出是什么?nnnnnnpublic class Base {n n private String baseName= "base";n public Base(){n callName();n }n n public void callName(){n System.out.println(baseName);n }n n static c
解决win10 edge 应用商店 账号登录闪退 小娜闪退等问题 1703更新后造成的问题同样适用
解决win10 edge闪退 应用商店闪退 账号登录闪退 小娜闪退等问题 1703更新后造成的问题同样适用
关于listview.setAdapter(adapter)程序闪退、崩溃问题的原因
最近按照一个视频写了一个自定义Adapter,但是运行的时候会在使用istview.setAdapter(adapter)时APP闪退,学习视频链接:nnhttps://www.imooc.com/video/7264nn然后搜索了一下发现有人提到去掉context == null就可以了,我去掉之后发现真的是这个原因,但是不明白为什么要去掉nnnn public static ViewHo...
Android开发笔记(一)增加控件后运行出现闪退
Android开发过程中,可能会出现运行正常,添加一个按钮或者其他控件之后再次运行就会出现闪退的问题,这个时候,要先构建并清理项目,再次运行,这时候问题可能就解决了。
android 自定义闪退Dialog 收集闪退信息
android 自定义闪退Dialog和收集闪退信息功能
请问在模拟机上正常运行,在手机 上测试联网就闪退(已解决)
请问在模拟机上正常运行,在手机 上测试联网就闪退rnhttps://blog.csdn.net/feidie436/article/details/77532194rn根据这个文章介绍的连接SQL,在模拟机上可以运行,在一个平板上可以运行,但是用手机可以打开,点按钮联网就闪退了,两个手机,一个oppo,一个华为都是一样的。rnrn...
使用Android Studio写安卓应用程序,运行安卓虚拟机上的程序闪退
不是点了某一个按钮之后发生的闪退,而是app一打开就闪退。n三个可能原因:n1.在onCreate函数以外的地方使用“findViewById”n正确的方式是如下图这样:nn要先在onCreate函数中初始化布局才能实例化按钮控件。n2.有不止一个Android Studio窗口在运行n关闭其他不需要的窗口。这个是在StackOverFlow看到的原因,但是事实证明我并不是因为这个…n3.布局文件...
真机调试没问题,打包ipa后程序闪退
n做一个SDK,一直用真机调试,没发现问题,打包后给测试安装后发现有闪退,怎么调试都没发现问题,真是怀疑人生,加了日志监控,统计到闪退定位到主函数里。nnhttps://blog.csdn.net/u012490953/article/details/51025110n如果是返回什么类型记得一定要返回,真机调试没有问题,但是打包了ipa会闪退?n通过这个的确是发现是有个返回了nil,但是返回nil...
Android开发时处理闪退问题的方法
就是记录闪退时的异常了!rn1 全局异常捕获处理类package com.example.admin.myandroidtest;nnimport android.content.Context;nimport android.content.pm.PackageInfo;nimport android.content.pm.PackageManager;nimport android.os.Bu
Android Studio打开内置模拟器时闪退(无任何反应或错误提示)
2019年5月2日17:54:48 速记rn查看了很多相关资料,都没能解决这个问题,所以写一个速记来给后人留下一个参考办法。rn看了很多资料都没能解决问题,最后想起在安装Android Studio选择安装目录时曾经出现过安装目录不能存在“‘ ’ ”这个提示。(因为我的计算机账户名是XX’s,默认安装目录是在C\user\你的账户名的文件夹下)rn又想起查看模拟器详细信息的时候模拟器是默认在C\user...
我遇到的android6.0闪退 没有正确提示错误
问题:之前一直使用android4.4 的测试,最近公司来了个华为M3平板(android6.0) ,我就跑了一下新项目,结果...rnBefore Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintF
android中打包之后的APK闪退,stuidio直接运行可以
做个笔记:     前几天PM给要了个apk准备看看什么程度了,然后发现安装就打开后闪退,我以为只是机型的问题. 后来老大来要了,给他后,他也打开闪退,我就开始重视这个问题了,用我的手机装了一下apk 发现也闪退,原来我一直用stuidio直接运行安装到手机上进行开发,但是打包后安装的apk不好使 有问题。    后来发现 原来是第三方依赖和jar包 重复冲突了。。。。。 删掉jar包或者依赖 就...
安卓跳转按钮的闪退问题
不知道为什么 跳转按钮有时可以跳转有时会闪退 程序并没有报错,求大神指导!闪退的次数特别多!
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 学习java子类和父类 课程格子闪退ios