[英]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.