#android #onclicklistener #android-xml #ontouchlistener #android-touch-event
#Android #onclicklistener #android-xml #ontouchlistener #android-touch-событие
Вопрос:
У меня есть базовое действие, в котором я раздул 4 фрагмента. у меня есть несколько методов, которые я должен использовать во всех фрагментах. но я этого не хочу. Я хочу реализовать этот метод внутри моей базовой активности, чтобы я мог повторно использовать свой метод для всех фрагментов. Я хочу использовать событие OnTouchListener для каждого родительского макета фрагментов. я могу достичь этого с помощью метода xml onClick и могу вызвать этот метод в BaseActivity, но я хочу использовать событие onTouch, этот метод недоступен в layout xml. Итак, я просто хочу получить доступ к ресурсу из моего макета фрагмента в моей базовой активности и реализовать TouchEvent в BaseActivity.
Возможно ли это.?? Приветствуется любая помощь..Спасибо!
Ответ №1:
Вы могли бы использовать getView ()
Подход 1
Перед вызовом getView вы должны убедиться, что был выполнен метод onCreateView вашего фрагмента (например, вы могли бы прикрепить OnPageChangeListener к вашему viewpager, а внутри выбранного onPageSelected вы прикрепили OnTouchListener)
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
fragments.get(position).getView().setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return false;
}
});
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
Подход 2
Создайте базовый фрагмент с помощью метода setOnTouchListener:
public class TouchableFragment extends Fragment {
protected View.OnTouchListener mOnTouchListener;
public void setOnTouchListener(View.OnTouchListener mOnTouchListener) {
this.mOnTouchListener = mOnTouchListener;
}
}
Внутри метода onCreateView вашего фрагмента:
public class MyFragment extends TouchableFragment {
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle s) {
mView = inflater.inflate(
R.layout.a_layout
container,
false
);
if(this.mOnTouchListener != null){
mView.setOnTouchListener(this.mOnTouchListener);
}
return mView;
}
}
И внутри вашей активности:
MyFragment myFragment = new MyFragment();
myFragment.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return false;
}
});
Комментарии:
1. Эй, вы можете еще раз проверить мой ответ? Я забыл упомянуть, что вы должны вызвать getView () после того, как убедитесь, что getView () был вызван, также добавлен новый подход к решению этой проблемы, спасибо
Ответ №2:
Вы можете определить свои представления как статические элементы вашего фрагмента. Затем вы можете получить к ним доступ внутри своей активности. Если вы это сделали, вы должны убедиться, что ваш фрагмент доступен при использовании его статических представлений.
Ответ №3:
если вы создаете один класс с именем constant class, в котором объявляете свой метод как общедоступный статический, и с помощью этого класса вы можете получить доступ к этому методу для любого действия и фрагмента, вам нужно передать контекст аргумента вашего действия в этот метод.
может быть, это полезно для вас.
Комментарии:
1. могу ли я получить доступ к представлениям фрагмента внутри этого класса.? если да, то как.?