0

В андроида класса активности, я видел мостики к Button файлу XML и настройке его для мыши слушателя использует findViewById():Разницы между кнопкой и RadioGroup в ссылках

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 (в другом классе активности), он был не направлен на объект по 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(), на которые ссылаются идентификаторы объектов.

Итак, почему b = (Button) findViewById(R.id.button1); объявлен в первом коде snippt, а rg = (RadioGroup) findViewById(R.id.radiogroup); - не во втором фрагменте.

Это что-то связанное с RadioGroup или оно применимо и к другим объектам?

+0

Разве пример RadioGroup не создает исключение NullPointerException, поскольку rg никогда не назначается? – Finnboy11

+2

У второго фрагмента кода есть ошибка - он определенно должен иметь вызов 'findViewById'. Обратите внимание, что есть библиотеки инъекций для просмотра, такие как [ButterKnife] (http://jakewharton.github.io/butterknife/), которые не требуют этого, но ваш пример здесь не содержит никакого кода, необходимого для этого. –

+0

@ Finnboy11 Я просто вижу этот код в учебнике и не запускаю его. – DummyBeginner

ответ

2

Пример RadioGroup также не должен запускаться, поскольку переменная rg никогда не назначается и, таким образом, создает исключение NullPointerException при попытке установить прослушиватель onCheckedChanged. По существу, не должно быть никаких различий в использовании классов Button и RadioGroup, по крайней мере в этом отношении. Это более чистая Java-вещь, чем специфическая для Android тема.

Возможно, вы наткнулись на определение слушателей в коде XML, как в this StackOverflow answer. Однако, это не непосредственно работать на onCheckedChanged так странно, что ситуация здесь этот путь вокруг ...

Edit:

Цитируется Adam S: Примечание есть вид инъекции библиотек, таких как ButterKnife, которые избегают необходимости в этом, но ваш пример здесь не содержит никакого кода, необходимого для этого.

Однако, похоже, что учебник, из которого был взят код, содержит ошибку.

Смежные вопросы