2010-11-22 4 views
0

В моем приложении нажатие строки списка или кнопки означает выполнение тех же команд. Моя проблема в том, что в списке и кнопке есть разные слушатели (AdapterView.OnItemClickListener vs. View.OnClickListener). Как добавить код для 2 представлений (как слушателя) без дублирования кода.Тот же прослушиватель для списка и кнопки

С наилучшими пожеланиями

ответ

0

Лучший способ написать класс-оболочку как для кнопки, так и для списка, и иметь общий прослушиватель .... и использовать их в вашем проекте .. , но если вы не готовы принять эту боль, самый простой способ как сказал Октавиан, поставить логику в методе, и вызывать его из обоих мест :)

+0

Не могли бы вы быть более конкретными с классом обертки? – Gratzi

+1

yes, Напишите класс MyButton, который расширяет Button и MyList, который расширяет List и позволяет им внедрить интерфейс MyInterface, который имеет метод, называемый widgetTaped (...), теперь как в MyList, так и в MyList, когда вызываются их соответствующие кликеры, вызовите метод widgetTaped(). Есть много других способов сделать это тоже ... пожалуйста, изучите – amithgc

+0

Спасибо за подсказки. Я создал слушателя, который реализует прослушиватель списка и прослушиватель представления, и который имеет метод, называемый в обоих методах слушателей. – Gratzi

1

Как я могу добавить код для 2-х видов (как слушатель) без дублирования кода.

Реализовать логику работы в методе и просто вызвать этот метод у ваших слушателей.

+0

Я знаю, что, но с использованием статического метода это не мой первый выбор. Мне было интересно, могу ли я использовать один слушатель для двух случаев. – Gratzi

+0

Было бы бессмысленно иметь одного общего слушателя. Также кто говорит, что это должен быть статический метод? Я этого не говорил. –

+0

это не будет статический метод (один для Octavian) ... одно дополнение, я использовал логическую переменную, чтобы определить источник моего вызова метода ... Thanx снова Octavian! – Prasham

1

Вот мое решение:

public class SelectRecipeListener implements AdapterView.OnItemClickListener, 
            View.OnClickListener{ 
private Context currentContext; 
private boolean storeAsLastViewed; 

public SelectRecipeListener(Context context, boolean store) { 
    currentContext = context; 
    storeAsLastViewed = store; 
} 

public void onItemClick(AdapterView<?> parent, View view, int position, 
     long id) { 
    execute((String) view.getTag()); 
} 

public void onClick(View v) { 
    execute((String) v.getTag()); 
} 

private void execute(String id) { 
    Intent intent = new Intent(currentContext, RecipeTabHost.class); 
    intent.putExtra(currentContext.getResources().getString(
      R.string.recipe_id_transition_key), id); 
    intent.putExtra(currentContext.getResources().getString(
      R.string.last_recipe_id_storing_key), storeAsLastViewed); 
    currentContext.startActivity(intent); 
} 

}

Смежные вопросы