могу ли я получить доступ к ресурсам или представлениям фрагмента внутри его baseactivity

#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. могу ли я получить доступ к представлениям фрагмента внутри этого класса.? если да, то как.?