Android从片段中获取tabLayout

时间:2017-06-08 03:36:30

标签: java android android-fragments android-tablayout

我想知道是否有办法从片段中访问tabLayout。

我在下面声明我的TabLayout并禁用所有标签。

TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);

LinearLayout tabStrip = ((LinearLayout)tabLayout.getChildAt(0));
    for(int i = 0; i < tabStrip.getChildCount(); i++) {
       tabStrip.getChildAt(i).setOnTouchListener(new View.OnTouchListener() {
           @Override
           public boolean onTouch(View v, MotionEvent event) {
                return true;
           }
       });
    }

我想要做的是能够在ClickListener中的片段中启用它们。

我不确定我是否应该声明tabLayout静态并像那样访问它,或者是否有正确的方法来执行此操作。

如果我没有解释它是正确的,我道歉 - 对Android仍然有点新鲜。

2 个答案:

答案 0 :(得分:1)

将tablayout声明为静态变量是处理场景的一种不好的方法。您可以使用界面来实现此目的。请查看有关如何在片段和活动之间进行通信的官方链接,这很简单。 https://developer.android.com/training/basics/fragments/communicating.html

答案 1 :(得分:1)

使用接口在片段和活动之间进行通信,用于样本

创建界面。

public interface OnFragmentInteractionListener {
    // TODO: Update argument type and name
    void onClickToEnableTab();
}

在活动中实施它。执行代码以启用标签

public class Activity implement OnFragmentInteractionListener{
    @Override
    public void onClickToEnableTab() {
       // TODO : Enable you tab layout
    }
}
片段中的

public class YourFragment extends Fragment {
private OnFragmentInteractionListener mListener;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }  
}

然后,在onClickListenner中的片段中,您可以调用

mListener.onClickToEnableTab();