引用中Button和RadioGroup之间的区别

时间:2015-06-06 13:24:49

标签: android onclicklistener android-button android-radiobutton oncheckedchanged

在一个Android Activity类中,我看到了一个Button XML文件的桥接,并且它为click侦听器设置了findViewById()

public class MyClass1 extends Activity implements OnClickListener {

    Button b;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.photo);

        b = (Button) findViewById(R.id.button1);    //This is where I have question
        b.setOnClickListener(this);
    }

    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.button1:

            break;
        case R.id.button2:

            break;
        }
    }
}

但至于引用RadioGroup(在另一个Activity类中),findViewById()并没有像Button那样指向对象:

public class MyClass2 extends Activity implements OnCheckedChangeListener {

    RadioGroup rg;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.photo);

        //Why isn't this here? --> rg = (RadioGroup) findViewById(R.id.radiogroup);
        rg.setOnCheckedChangeListener(this);
    }

   @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        // TODO Auto-generated method stub
        switch (checkedId) {
        case R.id.rBad:

            break;
        case R.id.rGood:

            break;
        }
    }
}

我的意思是在onClick()onCheckedChanged()方法中引用了对象的id。

为什么在第一个代码snippt中声明b = (Button) findViewById(R.id.button1);,而在第二个代码段中rg = (RadioGroup) findViewById(R.id.radiogroup);不是。

它是否与RadioGroup相关,或者它也适用于其他对象?

1 个答案:

答案 0 :(得分:2)

RadioGroup示例甚至不应该运行,因为从未分配rg变量,因此当您尝试设置onCheckedChanged侦听器时会创建NullPointerException。从本质上讲,Button和RadioGroup类的使用应该没有区别,至少在这方面是这样。这是一个纯Java的东西,而不是Android特定的主题。

您可能偶然发现的是在XML代码中定义侦听器,如this StackOverflow answer中所示。但是,这并不能直接用于onCheckedChanged,所以这里的情况就这样奇怪......

修改

引自Adam S : 请注意,有一些视图注入库(如ButterKnife)可以避免使用它,但是这里的示例并不包含任何所需的代码。

然而,似乎从中获取代码的教程中有一个错误。