Я пытаюсь запустить код внутри onMenuItemClick() без нажатия кнопки меню

#java #android #android-studio

#java #Android #android-studio

Вопрос:

Это код для действия Android, который я хочу запустить, если это вообще возможно, без создания нового действия. Необходимо избавиться от функции прослушивателя. Я попытался создать новый класс Java, но он выдал мне ошибку в функциях putExtra. Также, как я могу справиться с экземпляром newConnection внутри конструктора прослушивателя.

 public class NewConnection extends Activity {

  private Bundle result = null;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

  private class Listener implements OnMenuItemClickListener {

    //used for starting activities 
    private NewConnection newConnection = null;

    public Listener(NewConnection newConnection)
    {
      this.newConnection = newConnection;
    }
  

Пытаюсь запустить приведенный ниже код, не нажимая:

     @Override
    public boolean **onMenuItemClick**(MenuItem item) {
      {
        // this will only connect need to package up and sent back
        Intent dataBundle = new Intent();

              String server = ("tsp//:server address");
              String port = ("1823");
              //put data into a bundle to be passed back to ClientConnections
            dataBundle.putExtra(ActivityConstants.server, server);
            dataBundle.putExtra(ActivityConstants.port, port);

              ...

              ...

            //add result bundle to the data being returned to ClientConnections
            dataBundle.putExtras(result);

            setResult(RESULT_OK, dataBundle);
            newConnection.finish();

        }
        return false;

      }
  

Это код, используемый для вызова действия:

            createConnection = new Intent();
createConnection.setClassName(
    clientConnections.getApplicationContext(),
    "org.eclipse.paho.android.service.sample.NewConnection");

clientConnections.startActivityForResult(createConnection,
    ActivityConstants.connect);
  

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

1. Все, что я вижу, это конструктор, который присваивает значение своего параметра члену класса. В чем вопрос?

2. Конструктор, который инициализирует переменную newConnection . В чем вопрос на самом деле?

3. Пожалуйста, уточните свой вопрос относительно того, что вы на самом деле спрашиваете

4. Извините, я новичок в java. Вопрос в том, находится ли этот код внутри класса newConnection, создаю ли я другой экземпляр newConnection в текущем экземпляре? А как насчет этого.newConnection = newConnection; что это делает? Заранее спасибо за помощь новичку: P

Ответ №1:

Это базовый конструктор в парадигме слушателя. Основная идея в области информатики заключается в том, что код должен быть повторно используемым, и для облегчения этот код, как правило, должен быть автономным. Это часто делается в Java с помощью слушателя. Обычно это абстрактный класс или интерфейс, который имеет несколько заданных функций. Основному классу, который использует прослушиватель, присваивается этот объект или объекты, и когда он достигает соответствующей точки, прослушиватель запускает уведомление вашего кода о событии.

Это позволяет людям писать полностью закрытый код и при этом предоставлять перехваты событий, благодаря которым другой пользователь, использующий этот код, может получать обратную связь, например, при нажатии на пункт меню или установлении нового соединения, и с этим разбирается человек, использующий этот код, но без автора исходного классазная что-нибудь о вашем коде. Это позволяет использовать такие вещи, как меню, менеджеры соединений и кнопки, которые не имеют никакого отношения к коду, который они запускают, по замыслу. Так что любое их количество может быть создано и использовано.