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

问题描述

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

}

}

解决方案

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

解决方案二:

参考:http://zhidao.baidu.com/link?url=1nzfRtheAa71BH69QvgFsIDc2NAVQwHMkx7yzJqaTJFFDXZ7c84vSCN91FkS3xurpTvPnFvaZGdgAr7ojNOyo_

解决方案三:

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

解决方案四:

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

时间: 2024-10-02 02:18:58

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

iphone5/5c/4s ios7越狱后程序闪退?ios7软件使用闪退解决步骤

[iphone5/5c/4s越狱后微信闪退解决方法] 1.pp助手没错就是pp助手了,我们去下载一个最新版本的pp助手安装在你电脑中. 2.安装好pp助手之后我们在电脑中打开PP助手,然后再把苹果手机连接电脑  之后我们再在pp助手界面点击"更多"如下图所示. 3.好了在进入到pp助手中我们再点击里面有一个"修复闪退" 点击它 4.待到修复提示完成后,我们重启一下苹果手机然后再打开软件闪退问题就解决了 好了到这里一聚小编己完全的给各位介绍了ios7越狱后程序闪退解决

图片-Android手机应用程序闪退

问题描述 Android手机应用程序闪退 自己是Android初学新手,按照课本上的示例敲代码,结果安装程序成功后,打开其闪退...问了好多次度娘,还是没有着落,还请各位前辈帮帮小弟,不胜感激... 解决方案 代码如下,还请各位前辈帮帮我... package com.example.myfirstapplycation; import android.app.Activity; import android.os.Bundle; import android.view.View; import

代码-android关于调用系统相机拍照后APP闪退的问题

问题描述 android关于调用系统相机拍照后APP闪退的问题 最近在写一个小APP,就是调用系统相机拍照,然后保存在本地相册,代码没有显示bug,但是在调试时出现了拍照后闪退的问题,我的测试机是小米2S,MIUI 7系统,android5.0.X的,拍照的照片能保存在本地,但是在拍照后点击确定后软件就闪退了,这是我的代码 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState)

phonegap-phoneGap开发,拍照功能,程序闪退

问题描述 phoneGap开发,拍照功能,程序闪退 phoneGap开发,拍照功能,程序闪退,拍照完成 返回的时候闪退还有就是有的手机裁切也会报错 解决方案 首先,你这个需要明确你的程序是否是在Android里,如果是Android,logcat会显示出报错的位置,这种情况通常会是权限导致.若是跑在ios上,抱歉,我暂时无法解答.

android-phoneGap开发,屏幕旋转之后,程序闪退

问题描述 phoneGap开发,屏幕旋转之后,程序闪退 用phoneGap做了一个很简单的android程序,super.loadUrl(""http://www.baidu.com"");,相当于就是把网址打个包,安装好之后可以打开,也可以看到页面,但是只有一旋转设备,页面没有跟着旋转,而是直接闪退,求问怎么解决?? 解决方案 你这是由于横竖屏转换导致activity重跑onCreate方法导致的,有两种解决方案: 1.横竖屏转换的时候不要重新跑onCreate方

viewflipper-ViewFlipper做图片滑动程序闪退

问题描述 ViewFlipper做图片滑动程序闪退 在网上找了一个代码 测试的时候只是五张图片没问题 当我多加几张的时候问题出来了 部署到手机上的时候程序一打开就自动关闭了 代码: srccom.example.demo MainActivity.java package com.example.demo; import com.example.demo.R.drawable; import android.app.Activity; import android.os.Bundle; impo

listview-fragment中自定义listFragment不显示,程序闪退

问题描述 fragment中自定义listFragment不显示,程序闪退 fragment中自定义listFragment不显示,程序闪退 这是fragment的代码: package com.example.date4_23; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.zip.Inflater; impo

hbase-Hbase开启后hmaster闪退!Hregionserver可以开启无法关闭!

问题描述 Hbase开启后hmaster闪退!Hregionserver可以开启无法关闭! 2015-04-27 10:22:22,023 INFO org.apache.zookeeper.ZooKeeper: Initiating client connection, conn ectString=slave1:2181,master:2181,slave2:2181 sessionTimeout=180000 watcher=master:600000x0 2015-04-27 10:22

8 应用程序闪退-WIN 8 应用程序闪退?

问题描述 WIN 8 应用程序闪退? WIN 8 应用程序闪退?一打开就自动退出去了.就查过很多资料,就说是与WIN8兼容性差导致的. 解决方案 右键要启动的程序 属性 兼容性 更改运行环境 试试 解决方案二: 右键单击要运行的程序--属性--兼容性 进去就知道怎么改了 解决方案三: 运行程序的时候,弹出对话框,选择兼容性 解决方案四: 最好重装一下系统试试