0

У меня есть базовый актив, в котором я раздул 4 фрагмента. У меня есть несколько методов, которые я должен использовать во всех фрагментах. Но я не хочу этого. Я хочу реализовать этот метод внутри моей базовой активности, чтобы я мог повторно использовать мой метод для всех фрагментов. Я хочу использовать событие onTouchListener для каждого родительского макета фрагментов. Я могу добиться этого с помощью метода xml onClick и вызывать этот метод в baseActivity, но я хочу использовать событие onTouch, этот метод недоступен в макете xml. Поэтому я просто хочу получить доступ к ресурсу из моего макета фрагмента в своей базовой деятельности и реализовать TouchEvent в baseActivity.Могу ли я получить доступ к ресурсам или представлениям фрагмента внутри его baseactivity

Возможно ли. ?? Любая помощь оценена. Спасибо! Спасибо!

ответ

0

Вы можете использовать GetView()

Approach 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; 
    } 
}); 
+0

thnx для ответа, но ... это не сработало для меня. –

+0

Эй, ты можешь проверить мой ответ снова? Я забыл упомянуть, что вы должны вызвать getView() после того, как вы убедитесь, что getView() был вызван, также добавил новый подход для решения этой проблемы, спасибо –

+0

Еще раз спасибо Cardoso. проверит этот код –

0

Вы можете определить свои взгляды как статические члены вашего фрагмента. Затем вы можете получить к ним доступ в своей деятельности. Если вы это сделали, вы должны убедиться, что ваш фрагмент доступен, когда вы используете его статические представления.

1

Если вы создаете один класс с постоянным классом, объявляете свой метод открытым, и с помощью этого класса вы можете получить доступ к этому методу для любых действий и фрагментов, вам необходимо передать контекст контекста вашей деятельности в этот метод.

может быть, это полезно для вас.

+0

может ли я получить доступ к представлениям фрагментов внутри этого класса? если да, то как.? –

+0

Да, вы передаете представления в аргумент. –