`
zranye
  • 浏览: 26040 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

记录android编程bug--布局文件

阅读更多
    昨天遇到一个非常苦恼的问题,忙到三点多也没解决,今天早上起来,摸索了一下,就解决了。这个给我一个提示,人在累的时候,工作效率很低,还是休息好吧,也许问题解决得更快一点。

好了,不罗嗦,直接上我遇到的问题。高手还是不要看下去了,很小很小的、不小心的错误,不然会忍不住喷火的。

    在观察Activity生命周期的时候,我写了三个布局文件main、second、third,second和third的布局文件只放有标识的TextView,并且写了这三个类:

public class ManiActivity extends Activity {
	private final static String TAG = "MainActity";
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.i(TAG, "ManiActivity onCreate");
        
        //当然这里还有一些按钮的事件绑定,用来作activity的跳转
    }
    @Override
    //还有onStart(),onResume(),onPause(),onStop(),onRestart(),onDestroy()的覆盖,都用加上一句Log.i(TAG,"ManiActivity 方法名");


public class SecondActivity extends Activity {
	private final static String TAG = "MainActity";
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.i(TAG, "SecondActivity onCreate");
        
    }
    @Override
    //还有onStart(),onResume(),onPause(),onStop(),onRestart(),onDestroy()的覆盖,都用加上一句Log.i(TAG,"ManiActivity 方法名");

public class ThirdActivity extends Activity {
	private final static String TAG = "MainActity";
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.i(TAG, "ThirdActivity onCreate");
        
    }
    @Override
    //还有onStart(),onResume(),onPause(),onStop(),onRestart(),onDestroy()的覆盖,都用加上一句Log.i(TAG,"ThirdActivity 方法名");


    有没有问题呢??哈哈...这样看好像比较容易看出来。

    这样运行是什么效果呢?不贴图了,就是点击了MainActivity的second按钮之后,跳转到了SecondActivity之后,MainActivity被stop了,SecondActivity开始了,但是SecondActivity是跟MainActivity的视图一样的,但是点击任何按钮都是没有反应的,神奇吧?(tips:高手还是别看下去了,不然你们会忍不住爆粗口的,这个是警示像我这样的菜鸟的)模拟器上退出软件,SecondActivity被Destroy了,再进入软件,第一个开启的是SecondActivity。对于我这样的菜鸟来说,真的有点错愕,为什么不是从MainActivity切入呢?为什么昨晚我的思路就没现在写博客这么清晰呢?哈哈...

    就是这一句setContentView(R.layout.main);我图方便,第二个和第三个Activity都是拷MainActivity的,没有改第二第三个activity的布局文件的绑定,还是绑到了main上面。所以,当跳转到第二个activity的时候,MainActivity所在的线程被stop了,SecondActivity被push到了stack顶端,能够拥有点击事件的监听器,但是因为绑定的是main的layout(就是这一句setContentView(R.layout.main);),只能用MainActivity的监听事件,而MainActivity被push到了stack中SecondActivity的下面,不能拥有监听的能力。晕了吧?哈哈... 所以能够在SecondActivity视图中看到MainActivity的视图,并且能够点击,但是点击之后没有反应。而退出软件的时候,SecondActivity被stop并Destroy掉,再进入的时候,因为MainActivity没有被Destroy,在LogCat中就会看到SecondActivity在没有Create MainActivity的时候被Create,产生是否绑错了main.xml就会抢占MainActivity的显示的怀疑,答案是否定的,因为stack中,绑定了main的MainActivity在stack中被堆置到了SecondActivity的下面,自然切入的时候,是先显示SecondActivity(这个时候从LogCat中跟踪是可以看到之前MainActivity是没有被destroy的)。

     昨天晚上跟踪了很久,甚至怀疑自己对stack工作的理解是否正确,为什么就没有像现在思路清晰呢?唉...三点半睡觉啊,白牺牲了,原来是这么小的问题,先罚自己写这一篇博文。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics