Android 表格布局 select

Android Tablayout select

我的片段中有带两个选项卡的 tablayout。问题是当我 运行 这个片段时它一开始不显示我的第一个片段。但是当我 select 第二个选项卡并返回到第一个选项卡时它工作正常吗? 我该如何解决这个问题?

我看过这个: 但它根本没有帮助。

public class FriendsFragment2 extends Fragment {

TabLayout tabs_fragment;
FriendshipFragment fragment1;
RequestFrienshipFragment fragment2;


public FriendsFragment2() {
    // Required empty public constructor
}


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container
        , @Nullable Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_friends2, container, false);
    tabs_fragment = (TabLayout) rootView.findViewById(R.id.tabs_fragment);


    setupTabLayout();

    EventTab();
    tabs_fragment.getTabAt(0).select();
    return rootView;
}


private void setupTabLayout() {

    fragment1 = new FriendshipFragment();
    fragment2 = new RequestFrienshipFragment();
    tabs_fragment.addTab(tabs_fragment.newTab().setText("two"));
    tabs_fragment.addTab(tabs_fragment.newTab().setText("one"));


}


private void EventTab() {
    tabs_fragment.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {

                setCurrenttabFragment(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });
}


private void setCurrenttabFragment(int tabPosition) {



    switch (tabPosition) {

        case 0:
        replaceFragment(fragment1);
            break;

        case 1:
            replaceFragment(fragment2);
            break;
    }
}


private void replaceFragment(Fragment fragment) {
    FragmentManager fm = getChildFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.replace(R.id.frame_container_friends_fragment, fragment);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    ft.commit();

}

}

首先,您可以将 viewpager 与选项卡一起使用,而不是弄乱古老的代码。但是,如果您想以已知的方式解决问题,那么

  1. 从不在 onCreateView()
  2. 中执行与 ui 无关的任务
  3. 覆盖onActivityCreated()并将这部分转移到创建的onActivity

``

public void onActivityCreated(Bundle savedInstanceState){
    super.onActivityCreated(savedInstanceState);
    setupTabLayout();
    EventTab();
    tabs_fragment.getTabAt(0).select();
}
  1. 最重要的部分

替换tabs_fragment.getTabAt(0).select();
tabs_fragment.post(new Runnable() {
            @Override
            public void run() {
               tabs_fragment.getTabAt(0).select(); 
            }
        });

您遇到的问题是因为您的tabs_fragment还没有准备好,您正在对其进行操作。但是通过执行上述步骤,将确保您在对其执行任何操作时都准备好选项卡。

编辑:在添加自身时将选项卡标记为 selectewd。 According to this doc 然后

private void setupTabLayout() {

    fragment1 = new FriendshipFragment();
    fragment2 = new RequestFrienshipFragment();
    tabs_fragment.addTab(tabs_fragment.newTab().setText("two"));
    tabs_fragment.addTab(tabs_fragment.newTab().setText("one"), true);


}

The link you viewed has a handler with some delay.There are always chances that your view might not be ready even after that delay. So the correct method is to apply runnable to the view itself. This will ensure that runnable is called only when view is ready.