简体   繁体   English

滑动标签时调用API

[英]Calling API when swiping tabs

I have a tab layout with 3 tabs.Each one of the tabs need to display some data from API calling (I'm using Retrofit).我有一个包含 3 个选项卡的选项卡布局。每个选项卡都需要显示来自 API 调用的一些数据(我正在使用 Retrofit)。

So , I have the main activity when user opens that activity I fetch the data for the first tab then display the view因此,当用户打开该活动时,我有主要活动,我获取第一个选项卡的数据,然后显示视图

    @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);
        }
   }

So in the success of the API call I inflate the view as below因此,在 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));

    }

So , The data for first fragment in first tab is obtained , My problem is with fragment 2 and 3.I only want to call the API when user swiping.因此,获得了第一个选项卡中第一个片段的数据,我的问题是片段 2 和 3。我只想在用户滑动时调用 API。 As you see above I tried to detect when user swipe to second tab then I call method to fetch data but unfortunately it's now working.正如您在上面看到的,我试图检测用户何时滑动到第二个选项卡,然后我调用方法来获取数据,但不幸的是它现在正在工作。

Do you have any idea on how to do this?你知道如何做到这一点吗?

You should call API's inside the fragment probably in setUserVisibleHint method in android您应该在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;
     }
 }

Use this method in your fragment to get visibility state of fragment and then call your api thre.在您的片段中使用此方法来获取片段的可见性状态,然后调用您的 api thre。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM