Один обработчик для нескольких View



Давайте дополним задачу: при нажатии на TextView, установим туда текст «Hello, World». Мы можем назначить тот же обработчик не только на кнопку, но и на TextView:

MainActivity.java

1 2 3 4 5 6 7 8 9 10 11 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);   helloTv = (TextView) findViewById(R.id.hello_tv); Button helloBtn = (Button) findViewById(R.id.hello_btn);   helloTv.setOnClickListener(onClickListener); helloBtn.setOnClickListener(onClickListener); }

Однако, тут может возникнуть закономерный вопрос: как же мы узнаем, на какой именно элемент было совершено нажатие?

Если вы внимательно посмотрите на метод onClick в обработчике, то увидите, что туда передается параметр View. Это именно тот View, на который было совершено нажатие.

А у View, соответственно, есть метод getId, по которому мы можем его идентифицировать. Измените код, чтобы он выглядел следующим образом:

MainActivity.java

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 private final View.OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) {   case R.id.hello_btn: helloTv.setText("Hi!"); break;   case R.id.hello_tv: helloTv.setText("Hello, World!"); break;   }   } };

Мы просто смотрим, на какой элемент было совершено нажатие, и задаем соответствующий текст. Все очень просто :)

 


Дата добавления: 2019-01-14; просмотров: 117; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!