Java 滑动选项卡时调用API
我有一个包含3个选项卡的选项卡布局。每个选项卡都需要显示来自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
@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,但它永远不会被调用