Страницы

Поиск по вопросам

понедельник, 25 февраля 2019 г.

Запуск activity в handler

Всем привет! Пытаюсь запустить активити в отдельном потоке с промежутком времени,код такой: И сам вопрос: все работает,активность запускается,можно ли как сделать отдельным методом или как,что бы в каждом case не писать new Handler().postDelayed(new Runnable() {
arr_imageA[i].setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
v.startAnimation(anim); mediaPlayer.start(); playSample(R.raw.click_sound); switch (v.getId()) { case R.id.imageView1: new Handler().postDelayed(new Runnable() {
@Override public void run() { startActivity(new Intent(getActivity(), a1.class)); } }, 100);
break;
case R.id.imageView2://todo копипаст startActivity(new Intent(getActivity(), a2.class)); break; case R.id.imageView3: startActivity(new Intent(getActivity(), a3.class)); break;
} }

});


Ответ

метод
public void startActivity(final Context activityContext, final Class activityClass) { new Handler().postDelayed(new Runnable() {
@Override public void run() { startActivity(new Intent(activityContext, activityClass)); } }, 100); }
В вашем коде отличие только в том, что вы запускаете разные активити, значит нужно это часть(разные активити) вынести как параметр для метода. Если посмотреть на объявление конструктора для класса Intent
public Intent(Context packageContext, Class cls)
то видим, что вторым параметром является Class cls, где означает любой тип данных (то есть Class от любого типа данных). Далее выносим этот параметр в наш собственный метод и делаем его таким Class activityClass где означает что мы хотим принимать Сlass от любого типа данных, родителем которого является Activity
Ну а затем в case передаем конкретные экземпляры Сlass соответствующих активити
startActivity(getActivity(), a1.class); //и так далле
так как родителем любой активити является Context, то выше приведенный вызов метода валиден

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

Отправить комментарий