Android表格布局选择

Android表格布局选择,android,select,android-tablayout,Android,Select,Android Tablayout,我的片段中有两个选项卡,问题是当我运行这个片段时,它并没有首先显示我的第一个片段。但当我选择第二个选项卡并返回到第一个选项卡时,它工作正常吗? 我怎样才能解决这个问题 我看到了这一点:但这一点都没有帮助 public class FriendsFragment2 extends Fragment { TabLayout tabs_fragment; FriendshipFragment fragment1; RequestFrienshipFragment fragment2; publi

我的片段中有两个选项卡,问题是当我运行这个片段时,它并没有首先显示我的第一个片段。但当我选择第二个选项卡并返回到第一个选项卡时,它工作正常吗? 我怎样才能解决这个问题

我看到了这一点:但这一点都没有帮助

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,而不必使用陈旧的代码。但如果你想以你已知的方式解决问题

  • 切勿在
    onCreateView()中执行与ui无关的任务
  • 重写onActivityCreated()并将此部分移到onActivity created
  • ``

  • 最重要的部分
  • 替换
    tabs_fragment.getTabAt(0).select()带有

    tabs_fragment.post(new Runnable() {
                @Override
                public void run() {
                   tabs_fragment.getTabAt(0).select(); 
                }
            });
    
    您所面临的问题是因为您的
    选项卡\u片段
    尚未准备就绪,您正在对其执行操作。但通过执行上述步骤,可以确保在对选项卡执行任何操作时,选项卡已准备就绪

    编辑:在添加选项卡时将其标记为selectewd。 然后

    您查看的链接有一个延迟处理程序。即使在延迟之后,您的视图也可能没有准备好。因此,正确的方法是将runnable应用于视图本身。这将确保仅在视图就绪时调用runnable


    我不知道你为什么要把你的生活复杂化。您可以简单地使用带有选项卡的viewpager。它有一个简单的库,可以为您保存所有信息。我不能使用ViewPager,因为它不会每次在您打开此案例时都刷新。我建议您经历片段生命周期。如果要刷新片段,应该重写onResume方法。还有很多碎片的实例,比如你的例子,会让你的应用程序慢得要命。我不知道为什么,但这并不能解决我的问题。谢谢你抽出时间,我仍然建议你使用带标签的viewpager。并遵循适当的片段生命周期进行刷新。我也尝试过,我确实使用了onResume并调用了我的getData()方法。每次刷卡时它都会刷新,但它不会从服务器获取数据。是的,你能不能也更新getData代码,我觉得这更重要请再次查看答案,我更新了一点。现在可能会有帮助
    tabs_fragment.post(new Runnable() {
                @Override
                public void run() {
                   tabs_fragment.getTabAt(0).select(); 
                }
            });
    
    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);
    
    
    }