0

我有一个基础活动,其中我膨胀了 4 个片段。我有几种方法必须在所有片段中使用。但我不希望那样。我想在我的基本活动中实现该方法,以便我可以将我的方法重用于所有片段。我想使用片段的每个父布局的 onTouchListener 事件。我可以通过 xml onClick 方法实现这一点,并且可以在 baseActivity 中调用此方法,但我想使用 onTouch 事件,该方法在布局 xml 中不可用。所以我只想从我的基本活动中的片段布局访问资源并在基本活动中实现 TouchEvent。

可能吗。??任何帮助表示赞赏..谢谢!

4

3 回答 3

0

如果您创建一个称为常量类的类,将您的方法声明为公共静态并使用该类,您可以将此方法访问到任何活动和片段,您必须将活动的参数上下文传递给该方法。

可能这对你有帮助。

于 2016-10-22T11:06:39.917 回答
0

你可以使用 getView()

方法一

在调用 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;
    }
}

在您的活动中:

MyFragment myFragment = new MyFragment();
myFragment.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        return false;
    }
});
于 2016-10-22T10:31:38.710 回答
0

您可以将视图定义为片段的静态成员。然后你可以在你的活动中访问它们。如果你这样做了,你应该确保当你使用它的静态视图时你的片段是可访问的。

于 2016-10-22T10:34:00.693 回答