我可以访问其基本活动中片段的资源或视图吗
can i access resources or views of fragment inside its baseactivity
我有一个底座 activity,我在其中充气了 4 个碎片。
我有几种方法必须在所有 fragments.but 中使用,我不希望这样。我想在我的基础 activity 中实现该方法,以便我可以将我的方法重用于所有片段。
我想使用片段的每个父布局的 onTouchListener 事件。
我可以通过 xml onClick 方法实现这一点,并且可以在 baseActivity 中调用此方法,但我想使用 onTouch 事件,该方法在布局 xml 中不可用。所以我只想从我的基础 activity 中的片段布局访问资源并在 baseActivity 中实现 TouchEvent。
可以吗??
感谢任何帮助..谢谢!
您可以使用 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) {
}
});
方法二
使用 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;
}
}
在你的 activity 里面:
MyFragment myFragment = new MyFragment();
myFragment.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return false;
}
});
您可以将视图定义为片段的静态成员。然后您可以在 activity 中访问它们。
如果你这样做了,你应该确保你的片段在你使用它的静态视图时是可访问的。
如果你将一个 class 称为常量 class 并声明你的方法为 public static 并使用那个 class 你可以访问这个方法到任何 activity 和片段,您必须将 activity 的参数上下文传递给该方法。
可能对你有帮助。
我有一个底座 activity,我在其中充气了 4 个碎片。 我有几种方法必须在所有 fragments.but 中使用,我不希望这样。我想在我的基础 activity 中实现该方法,以便我可以将我的方法重用于所有片段。 我想使用片段的每个父布局的 onTouchListener 事件。 我可以通过 xml onClick 方法实现这一点,并且可以在 baseActivity 中调用此方法,但我想使用 onTouch 事件,该方法在布局 xml 中不可用。所以我只想从我的基础 activity 中的片段布局访问资源并在 baseActivity 中实现 TouchEvent。
可以吗?? 感谢任何帮助..谢谢!
您可以使用 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) {
}
});
方法二
使用 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;
}
}
在你的 activity 里面:
MyFragment myFragment = new MyFragment();
myFragment.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return false;
}
});
您可以将视图定义为片段的静态成员。然后您可以在 activity 中访问它们。 如果你这样做了,你应该确保你的片段在你使用它的静态视图时是可访问的。
如果你将一个 class 称为常量 class 并声明你的方法为 public static 并使用那个 class 你可以访问这个方法到任何 activity 和片段,您必须将 activity 的参数上下文传递给该方法。
可能对你有帮助。