Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 滑动选项卡时调用API_Java_Android_Tabs_Fragment - Fatal编程技术网

Java 滑动选项卡时调用API

Java 滑动选项卡时调用API,java,android,tabs,fragment,Java,Android,Tabs,Fragment,我有一个包含3个选项卡的选项卡布局。每个选项卡都需要显示来自API调用的一些数据(我正在使用改型) 所以,当用户打开该活动时,我就有了主活动,我获取第一个选项卡的数据,然后显示视图 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = this; if (Applica

我有一个包含3个选项卡的选项卡布局。每个选项卡都需要显示来自API调用的一些数据(我正在使用改型)

所以,当用户打开该活动时,我就有了主活动,我获取第一个选项卡的数据,然后显示视图

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = this;

        if (Application.isConnected()) {
            getTrips();

        } else {
            Toast.makeText(this , "No internet Connection" , Toast.LENGTH_LONG).show();
            setContentView(R.layout.no_internet_connection);
        }
   }
因此,在API调用成功后,我将视图放大如下

   public void inflatingView () {

        setContentView(R.layout.activity_mytrip);
        context = this;

        tvTitle = findViewById(R.id.tv_title);
        tabLayout = findViewById(R.id.tablayout);
        tvTitle.setText("Trips");
        tabLayout.addTab(tabLayout.newTab().setText("My Trips"));
        tabLayout.addTab(tabLayout.newTab().setText("Unclosed Trips"));
        tabLayout.addTab(tabLayout.newTab().setText("UnApproved Trips"));


        viewPager = findViewById(R.id.viewpager);
        myTripAdapter = new MyTripAdapter(getSupportFragmentManager(),tabLayout.getTabCount());
        viewPager.setAdapter(myTripAdapter);
        viewPager.setOffscreenPageLimit(3);


        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {

                switch (tabLayout.getSelectedTabPosition()) { 

                    case 0 :
                        Log.d("test" , "first tab");
                        break;
                    case 1 :
                        Log.d("test" , "Second tab");
                        getTab2Data();
                        break;
                    case 2 :
                        Log.d("test" , "Third tab");
                        break;
                }

                viewPager.setCurrentItem(tabLayout.getSelectedTabPosition());
            }

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

            }

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

            }
        });

        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));

    }
因此,获得了第一个选项卡中第一个片段的数据,我的问题是片段2和3。我只想在用户刷卡时调用API。正如您在上面看到的,我试图检测用户何时滑动到第二个选项卡,然后调用该方法来获取数据,但不幸的是,它现在工作了


你知道怎么做吗?

你应该在android的setUserVisibleHint方法中调用片段内部的API

boolean _areLecturesLoaded = false;

@Override
 public void setUserVisibleHint(boolean isVisibleToUser) {
     super.setUserVisibleHint(isVisibleToUser);
     if (isVisibleToUser && !_areLecturesLoaded ) {
      loadYourRetrofitData(); //Load your data here  
      _areLecturesLoaded = true;
     }
 }

在片段中使用此方法获取片段的可见性状态,然后调用api thre

@Override 
boolean getUserVisibleHint() {
    super.getUserVisibleHint()
    boolean isVisibleToUser=super.getUserVisibleHint()
    if(isVisibleToUser){
        //call api here
    }
    return isVisibleToUser
}

我试过了,问题是即使片段(tab2)不可见,也会调用onViewCreated()。我想要的是,当第二个片段可见时,我想显示进度对话框,然后显示数据。最后我应该返回什么?已编辑。现在检查片段中的哪个方法应该调用getUserVisibleHint()您应该在片段中重写此方法,如果用户当前看到此选项卡片段,则此方法isVisibleToUser将为true。所以你可以在这里调用你的api,但它永远不会被调用