android – 如何在Fragment中处理网络调用

前端之家收集整理的这篇文章主要介绍了android – 如何在Fragment中处理网络调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下情况:

我有一个托管ViewPager的Activity,我有4个片段;

一开始的ViewPager包含片段A,

用户在ViewPager上滑动片段B进入ViewPager,然后片段C和片段D …等…

现在,只要实例化FragmentPagerAdapter,就会创建至少2个片段.

这带来了两个问题:

>每个片段都需要执行网络呼叫,但我不想做不必要的(我不想为片段B进行网络调用,如果用户从不滑动到片段B);
>类似于1.),当Fragment执行网络调用时,我需要显示一个ProgessDialog,但是如果用户从未进入过它,我不想显示Fragment B中的对话框…

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

活动

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

FragmentPagerAdapter

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片段

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

解决方法

试试这个,在每个片段覆盖下面的方法,并在它可见时调用你的函数
@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");
        }
    }
}

编辑

注意:这仅在使用FragmentPagerAdapter或FragmentStatePagerAdapter时有用

原文链接:https://www.f2er.com/android/316060.html

猜你在找的Android相关文章