【问题标题】:Why does moving this Togglebutton definition result in crash?为什么移动这个 Togglebutton 定义会导致崩溃?
【发布时间】:2012-08-06 19:20:19
【问题描述】:

在我的应用程序中,我有一个打开和关闭蓝牙的按钮,我注意到当我将切换按钮定义移到类的顶部并移出onResume(); 时,应用程序崩溃并出现 nullpointerexception,这里是崩溃代码的简短版本:

    public class MainActivity extends Activity {
        static final BluetoothAdapter myBluetooth = BluetoothAdapter.getDefaultAdapter();
        final ToggleButton tglbtn = (ToggleButton)findViewById(R.id.ToggleButton01);

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        if(myBluetooth == null){
            setContentView(R.layout.notsupported);  
        }
        else{
            setContentView(R.layout.supported);
        }
    }

        @Override
        public void onResume()
        {
            super.onResume();
            tglbtn.setChecked(myBluetooth.isEnabled());
            tglbtn.setOnClickListener(new OnClickListener(){
                 public void onClick(View v) { .......}
            }
        }
    }

当我移动时final ToggleButton tglbtn = (ToggleButton)findViewById(R.id.ToggleButton01); 回到onResume(),应用运行良好,没有崩溃,有人能解释一下为什么会这样吗?

【问题讨论】:

    标签: android android-widget adt


    【解决方案1】:

    您是在 onCreate() 中分配您的视图,对吗?具体来说,它应该在 setContentView(X) 之后发生。这样做的原因是因为此时所有视图都将是非空的。

    【讨论】:

    • 是的,我确实在 onCreate 中设置了视图,更改了我的示例以显示我的工作。
    • 您不应该在 onCreate 之外找到视图。具体来说,在您的情况下,您应该在 onCreate 之外拥有的唯一东西是一个按钮。它没有理由是静态的。
    • 所以基本上我不能引用布局中包含的资源(按钮、文本视图等),直到 setContentView();是否已为该特定布局调用?
    • @gjj 如果它解决了您的问题,请不要忘记将其标记为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多