Android: шаблон прослушивателя в onCreate()

#android #user-interface #listener

#Android #пользовательский интерфейс #прослушиватель

Вопрос:

Итак, я снова задаю очень простой вопрос. Я прошу прощения за свою неумелость, но, полагаю, я плохо прочитал приведенные руководства по этим темам. Мой вопрос заключается в следующем:

Я хотел бы использовать шаблон «прослушиватель» для обработки нажатий кнопок в моем графическом интерфейсе. Я считаю, что OnClickListener — это то, что мне нужно использовать для обработки этих нажатий кнопок. Однако я не уверен, должен ли я создавать и обрабатывать события, которые происходят после создания графического интерфейса в методе onCreate. Следующий код находится в моем методе onCreate для одного из моих действий:

 View.OnClickListener upDownListener = new View.OnClickListener() 
    {       
        @Override
        public void onClick(View v) 
        {


            if(v == (upOneButton))
            {
                Log.d("OptionSelect", "Up One Button Pressed.");
                ops.getOptionList().get(0).incrementProbability(4);
            } . . .
  

Вызываемый этот метод обновляет некоторый текст GUI с другим номером. Он вызывается, но графический интерфейс не отвечает. Я полагаю, это связано с моей попыткой использовать его в методе onCreate.

Короче говоря, каков хороший и простой способ обработки пользовательских событий в графическом интерфейсе и где это должно происходить?

Большое вам спасибо.

РЕДАКТИРОВАТЬ: Log.d() действительно вызывается. Кроме того, ops — это объект типа OptionSelect, который является типом класса, в котором выполняется вызов onCreate(). Станет ли это проблемой? Кроме того, вот метод для incrementProbability():

 public void incrementProbability(int numberOfOptions)
    {
        probability  = (numberOfOptions - 1);
        if(probability > 100)
        {
            Log.i("OptionSelect", "Exceeded Maximum by "   (probability - 100));
            probability = 100;
        }
    }
  

Кроме того, вот соответствующий код, который я должен был включить, который обновляет мой графический интерфейс в конце метода onClick ():

     private void refreshDisplay(TextView a, TextView b, TextView c, TextView d)
{
    a.setText(getOptionList().get(0).getProbability()   "");
    b.setText(getOptionList().get(1).getProbability()   "");
    c.setText(getOptionList().get(2).getProbability()   "");
    d.setText(getOptionList().get(3).getProbability()   "");

    a.invalidate();
    b.invalidate();
    c.invalidate();
    d.invalidate();
}
  

Пока спасибо за помощь!

Комментарии:

1. Я не думаю, что это проблема с вашим прослушивателем / обработчиком, но на самом деле, как вы обновляете пользовательский интерфейс, выполняется ли ваш вызов Log.d?

2. Можете ли вы опубликовать больше окружающего кода? Что такое ops ? Какой это тип? Где еще он изменен? incrementProbability Запускает ли какое-либо событие ‘changed’, которое пользовательский интерфейс прослушивает, чтобы оно могло обновляться?

Ответ №1:

Лично я предпочитаю, чтобы мои действия реализовывали интерфейсы прослушивателя и добавляли метод onClick к самому действию, например…

 public class MyActivity extends Activity
    implements View.OnClickListener {

    ...

    @Override
    public void onClick(View v) {

        ...

    }
}
  

Затем я просто использую…

 myGuiObject.setOnClickListener(this);
  

…всякий раз, когда я хочу установить этот метод в качестве прослушивателя для любого объекта GUI.