почему кнопка создается во втором экземпляре, а не в первом? - PullRequest
0 голосов
/ 26 января 2012

Я должен спросить это, потому что я действительно борюсь с ООП, а это концепции ООП, которые я не понимаю Пожалуйста, помогите мне. Код, который я вставил ниже, взят из метода onCreate для Android Activity, но вы можете ответить даже без знания Android. Почему объект кнопки не создан для этой кнопки:

buttonSaveMem2 = (Button)findViewById(R.id.save_mem2);
buttonSaveMem2.setOnClickListener(buttonSaveMem2OnClickListener);

во время создания объекта для этого?

Button buttonStartAnother = (Button)findViewByI(R.id.startanother);        
buttonStartAnother.setOnClickListener(new Button.OnClickListener()
{

Вот полный код метода:

   @Override
   public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

   textSavedMem1 = (TextView)findViewById(R.id.savedmem1);
   textSavedMem2 = (TextView)findViewById(R.id.savedmem2);
   editText1 = (EditText)findViewById(R.id.edittext1);
   editText2 = (EditText)findViewById(R.id.edittext2);
   buttonSaveMem1 = (Button)findViewById(R.id.save_mem1);
   buttonSaveMem2 = (Button)findViewById(R.id.save_mem2);

   buttonSaveMem1.setOnClickListener(buttonSaveMem1OnClickListener);
   buttonSaveMem2.setOnClickListener(buttonSaveMem2OnClickListener);

   Button buttonStartAnother = (Button)findViewById(R.id.startanother);
   buttonStartAnother.setOnClickListener(new Button.OnClickListener(){

Спасибо.

Ответы [ 3 ]

1 голос
/ 26 января 2012

Что я понял из вашего вопроса и кода, размещенного здесь, вы просто спрашиваете разницу между двумя утверждениями ниже? а также почему заявления были написаны так?

buttonSaveMem2 = (Button)findViewById(R.id.save_mem2);

и

Button buttonStartAnother = (Button)findViewByI(R.id.startanother);

Я прав? Если да, то прочитайте ответ ниже, иначе забудьте.

Вы думаете, что кнопка buttonStartAnother создается как во втором выражении, а кнопка buttonSaveMem2 не создается как в первом утверждении.

На самом деле кнопка buttonSaveMem2 объявлена ​​ранее onCreate(). Почему он так сделал, потому что он должен использовать кнопку buttonSaveMem2 другими способами.

Но кнопка buttonStartAnother не требуется использовать в любых других методах, поэтому он объявлен внутри onCreate () .

См. Ниже шаблон для вашего кода, вы поймете это.

public class Demo extends Activity {
    TextView textSavedMem1, textSavedMem2;
    Button buttonSaveMem1, buttonSaveMem2;
    EditText editText1, editText2;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        textSavedMem1 = (TextView)findViewById(R.id.savedmem1);
        textSavedMem2 = (TextView)findViewById(R.id.savedmem2);
        editText1 = (EditText)findViewById(R.id.edittext1);
        editText2 = (EditText)findViewById(R.id.edittext2);
        buttonSaveMem1 = (Button)findViewById(R.id.save_mem1);
        buttonSaveMem2 = (Button)findViewById(R.id.save_mem2);

        buttonSaveMem1.setOnClickListener(buttonSaveMem1OnClickListener);
        buttonSaveMem2.setOnClickListener(buttonSaveMem2OnClickListener);

        Button buttonStartAnother = (Button)findViewById(R.id.startanother);
        buttonStartAnother.setOnClickListener(new Button.OnClickListener(){
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub              
            }   
        });
    }       
    public void myMethod() {
        buttonSaveMem2.setText("myMethod called");
            // buttonSaveMem2 is accessible here because it is declared globally
        // buttonStartAnother.setText("hello");
            // If you remove comment on above line you will get error
            // because buttonStartAnother is invisible to this method
    }
}

Надеюсь, вы поймете, почему создаются такие кнопки, если вы не проверили myMethod в приведенном выше коде, проверьте это.

0 голосов
/ 26 января 2012

Проблема почти наверняка в том, что в вашем макете отсутствует представление с идентификатором save_mem2. Причина, по которой работает второй блок кода, заключается в том, что существует представление с идентификатором startanother.

0 голосов
/ 26 января 2012

Это не проблема ООП, на самом деле это проблема кодирования вашей реализации.

Прочитайте основы Android ... Виджет - это представление, которое используется Android для получения ввода от пользователя, это может быть щелчок или что-то еще. В частности, из-за того, как устроен android, все виджеты (представления) при использовании должны иметь какой-то способ ссылаться на них ... введите метод fineViewById (xx), который используется для поиска виджета / представления с этим конкретным идентификатором, часто исходя из файла R.java.

Изучите основы языка до , когда вы начнете кодировать это, вы сэкономите лот времени ..

Вы можете начать здесь -> http://developer.android.com/resources/browser.html?tag=tutorial

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...