我可以在其基本活动中访问片段的资源或视图

时间:2016-10-22 10:20:06

标签: android onclicklistener android-xml ontouchlistener android-touch-event

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

可能吗? 感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分:0)

您可以使用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 :(得分:0)

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

答案 2 :(得分:0)

如果你创建一个名为常量类的类,将你的方法声明为public static,并且使用该类可以将此方法访问任何活动和片段,则必须将活动的参数上下文传递给该方法。

可能对您有所帮助。