#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.