Как я могу вывести методы слушателя из области видимости в Java? - PullRequest
0 голосов
/ 23 сентября 2011
public class SomeClass {
    public void SomeMethod() {
        GridView gv = new GridView(this);
        gv.setOnClickListener(new GridView.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
            }

        });
    }

    // Define onClick here and reference it somehow above?

}

Как я могу вывести метод onClick из этого блока кода в корень класса?Например, вы можете сделать это на C #.

Ответы [ 6 ]

1 голос
/ 23 сентября 2011

создать следующий внутренний класс

class click implements OnClicklIstener
{
 public void onClick(View v) {
      // do your stuff
    }

}

и

gv.setOnClickListener(new click());
0 голосов
/ 23 сентября 2011

Разве это не сработает?

public class SomeClass implements GridView.OnClickListener {
    public void SomeMethod() {
        GridView gv = new GridView(this);
        gv.setOnClickListener(this);
    }

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
    }
}
0 голосов
/ 23 сентября 2011
public class SomeClass extends Activity implements View.OnClickListener 
{
GridView gv;
 public void SomeMethod() {
        gv = new GridView(this);
        gv.setOnClickListener(this); 
     }

   @Override
   public void onClick(View v) {
   if(v==gv)
   {
      // do something when the button is clicked
   }
}
0 голосов
/ 23 сентября 2011

Как это:

public class SomeClass {
    public void SomeMethod() {
        GridView gv = new GridView(this);
        gv.setOnClickListener(new GridView.OnClickListener() {

            @Override
            public void onClick(View view) {
                SomeClass.this.onClick(view);
            }

        });
    }

    public void onClick(View view) {
        // implement me please
    }

}
0 голосов
/ 23 сентября 2011

Вы можете объявить Слушатель как любой другой атрибут класса:

public class HomeActivity extends Activity {

 public void SomeMethod() {
        GridView gv = new GridView(this);
        gv.setOnClickListener(gridClickedListener);
    }

 private GridView.OnClickListener gridClickedListener =  new GridView.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
            }

        });
}

Или реализуйте интерфейсы OnClickListener (или другие), но вам нужно будет знать, какое представление было щелкнуто (переключение внутри обработчика OnClick), если несколько представлений будут сообщать этому слушателю. Я склонен не использовать этот подход - он выглядит менее читабельным для меня.

0 голосов
/ 23 сентября 2011

Легко, просто реализуйте интерфейс OnClickListener.

public class SomeClass extends Activity implements OnClickListener 

 // Implement the OnClickListener callback
    public void onClick(View v) {
      // check the view type : Use View v to check which view is this called for using getId () 
    }
    ...

Обратите внимание, что вы должны проверить, какой вид был выбран, прежде чем выполнять обработку.

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