gpt4 book ai didi

android - 如何处理 fragment 内的网络调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:21:24 24 4
gpt4 key购买 nike

我有以下情况:

我有一个托管 ViewPagerActivity,我有 4 个 Fragments

开头的ViewPager包含Fragment A,

当用户在 ViewPager 上滑动时,Fragment B 进入 ViewPager,然后是 Fragment C 和 < strong> fragment D ...等...

现在,一旦 FragmentPagerAdapter 被实例化,至少会创建 2 个 fragment 。

这带来了 2 个问题:

  1. 每个 Fragment 都需要执行网络调用,但我不想做不必要的(如果用户从不滑动到 Fragment,我不想为 Fragment B 进行网络调用B );
  2. 类似于 1.),我需要在 Fragment 执行网络调用时显示 ProgessDialog,但如果用户从不访问它,我不想显示来自 Fragment B 的对话框...

请问在这种情况下我应该使用什么样的模式?

Activity

public class PagerActivity extends ActionBarActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager_layout);

ViewPager pager=(ViewPager)findViewById(R.id.pager);
TabPageIndicator tabs=(TabPageIndicator)findViewById(R.id.titles);

pager.setAdapter(buildAdapter());
tabs.setViewPager(pager);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}

fragment 页面适配器

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {


@Override
public int getCount() {
return (4);
}

@Override
public Fragment getItem(int position) {


if (position == 1) {
if (dashbardFragment == null)
dashbardFragment = DashBoardFragment.newInstance(position);
return dashbardFragment;
}
if (position == 0) {
if (listOfParticipantFragment == null)
listOfParticipantFragment = ListOfParicipantsFragment
.newInstance(position);
return listOfParticipantFragment;
}

}

1 个 fragment

public class ListOfParicipantsFragment extends Fragment {

public static ListOfParicipantsFragment newInstance(int position) {
ListOfParicipantsFragment frag = new ListOfParicipantsFragment();
return (frag);
}

public static String getTitle(Context ctxt, int position) {
return myApplication.getContext().getResources().getString(R.string.list_of_participants_fragment_title);
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View result = inflater.inflate(R.layout.guest_list_fragment_layout,
container, false);

return (result);
}

最佳答案

试试这个,在每个 fragment override 下面的方法中,当它可见时调用你的函数:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisible()){
if(isVisibleToUser){
Log.d("MyTag","My Fragment is visible");
}else{
Log.d("MyTag","My Fragment is not visible");
}
}
}

编辑

注意:这仅在使用 FragmentPagerAdapterFragmentStatePagerAdapter 时有用

关于android - 如何处理 fragment 内的网络调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26400014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com