package com.parttime.addresslist.userdetail; import android.annotation.SuppressLint; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import com.carson.constant.ConstantForSaveList; import com.parttime.constants.ApplicationConstants; import com.parttime.net.DefaultCallback; import com.parttime.net.HuanXinRequest; import com.parttime.net.UserDetailRequest; import com.parttime.pojo.UserDetailVO; import com.qingmu.jianzhidaren.BuildConfig; import com.qingmu.jianzhidaren.R; import com.quark.model.HuanxinUser; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashSet; /** * * Created by dehua on 15/7/28. */ public class UserDetailPagerAdapter extends FragmentPagerAdapter{ public ArrayList<String> userIds; public HashMap<String, UserDetailVO> cache = new HashMap<>(); public UserDetailActivity.FromAndStatus fromAndStatus; public UserDetailActivity userDetailActivity; FragmentManager fm ; public UserDetailPagerAdapter(FragmentManager fm, UserDetailActivity userDetailActivity) { super(fm); this.fm = fm; this.userDetailActivity = userDetailActivity; } public void setData(LinkedHashSet<String> userIds) { this.userIds = new ArrayList<>(userIds); } @Override public Fragment getItem(int position) { String userId = userIds.get(position); //userDetailActivity.initUserBlock(userId); UserDetailFragment fragment = UserDetailFragment.newInstance(userId); fragment.userDetailPagerAdapter = this; return fragment; } @Override public Object instantiateItem(ViewGroup container, int position) { //得到缓存的fragment Fragment fragment = (Fragment) super.instantiateItem(container, position); //得到tag,这点很重要 String fragmentTag = fragment.getTag(); /*if (fragmentsUpdateFlag[position % fragmentsUpdateFlag.length]) { //如果这个fragment需要更新 FragmentTransaction ft = fm.beginTransaction(); //移除旧的fragment ft.remove(fragment); //换成新的fragment fragment = fragments[position % fragments.length]; //添加新fragment时必须用前面获得的tag,这点很重要 ft.add(container.getId(), fragment, fragmentTag); ft.attach(fragment); ft.commit(); //复位更新标志 fragmentsUpdateFlag[position % fragmentsUpdateFlag.length] = false; }*/ return fragment; } @Override public int getCount() { return userIds.size(); } public static class UserDetailFragment extends Fragment { private static final String ARG_USER_ID = "userId"; protected String userId; UserDetailPagerAdapter userDetailPagerAdapter; /** * Returns a new instance of this fragment for the given section * number. */ public static UserDetailFragment newInstance(String userId) { UserDetailFragment fragment = new UserDetailFragment(); Bundle args = new Bundle(); args.putString(ARG_USER_ID, userId); fragment.setArguments(args); return fragment; } public UserDetailFragment() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); userId = getArguments().getString(ARG_USER_ID); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.activity_user_detail_item, container, false); final UserDetailViewHelper helper = new UserDetailViewHelper(this, userDetailPagerAdapter); UserDetailViewHelper.InitContent initContent = null; if (BuildConfig.DEBUG) { //for test //userDetailPagerAdapter.fromAndStatus = UserDetailActivity.FromAndStatus.FROM_ACTIVITY_GROUP_AND_NOT_FINISH; } if (UserDetailActivity.FromAndStatus.FROM_NORMAL_GROUP_AND_FRIEND == userDetailPagerAdapter.fromAndStatus) { initContent = UserDetailViewHelper.InitContent.INIT_FRIEND; } else if (UserDetailActivity.FromAndStatus.FROM_ACTIVITY_GROUP_AND_NOT_FINISH == userDetailPagerAdapter.fromAndStatus) { initContent = UserDetailViewHelper.InitContent.INIT_RESUME; } else if (UserDetailActivity.FromAndStatus.FROM_ACTIVITY_GROUP_AND_IS_FINISH == userDetailPagerAdapter.fromAndStatus) { initContent = UserDetailViewHelper.InitContent.INIT_APPRAISE; } helper.initView(rootView, initContent); final UserDetailViewHelper.InitContent initContent2 = initContent; if (UserDetailActivity.FromAndStatus.FROM_ACTIVITY_GROUP_AND_NOT_FINISH == userDetailPagerAdapter.fromAndStatus || UserDetailActivity.FromAndStatus.FROM_ACTIVITY_GROUP_AND_IS_FINISH == userDetailPagerAdapter.fromAndStatus) { UserDetailVO userDetailVO = userDetailPagerAdapter.cache.get(userId); if (userDetailVO != null) { helper.reflesh(userDetailVO, initContent); } else { userDetailPagerAdapter.userDetailActivity.showWait(true); new UserDetailRequest().getUserDetail(userId, userDetailPagerAdapter.userDetailActivity.groupId, userDetailPagerAdapter.userDetailActivity.queue, new DefaultCallback() { @Override public void success(Object obj) { if (obj != null && obj instanceof UserDetailVO) { UserDetailVO vo = (UserDetailVO) obj; userDetailPagerAdapter.cache.put(userId, vo); helper.reflesh(vo, initContent2); } userDetailPagerAdapter.userDetailActivity.showWait(false); } @Override public void failed(Object obj) { userDetailPagerAdapter.userDetailActivity.showWait(false); } }); } } else if (UserDetailActivity.FromAndStatus.FROM_NORMAL_GROUP_AND_FRIEND == userDetailPagerAdapter.fromAndStatus) { initHuanxinUserData(userId, helper, initContent2); } return rootView; } private void initHuanxinUserData(final String userId, UserDetailViewHelper helper, UserDetailViewHelper.InitContent initContent) { if (userId != null) { UserDetailVO userDetailVO = userDetailPagerAdapter.cache.get(userId); if(userDetailVO != null){ helper.reflesh(userDetailVO, initContent); }else { DetailInfoCallback callback = new DetailInfoCallback(helper, initContent); userDetailPagerAdapter.userDetailActivity.showWait(true); if(userId.contains(ApplicationConstants.NORMALI_USER_PREFIX_CHAR)) { new HuanXinRequest().getHuanxinUserDetailList(userId, userDetailPagerAdapter.userDetailActivity.queue, callback); }else{ new HuanXinRequest().getHuanxinCompanyInfoDetailList(userId, userDetailPagerAdapter.userDetailActivity.queue, callback); } } } } class DetailInfoCallback extends DefaultCallback { UserDetailViewHelper helper ; UserDetailViewHelper.InitContent initContent ; DetailInfoCallback(UserDetailViewHelper helper, UserDetailViewHelper.InitContent initContent){ this.helper=helper; this.initContent = initContent; } @Override public void success(Object obj) { super.success(obj); if (obj instanceof ArrayList) { @SuppressLint("unchecked") ArrayList<HuanxinUser> list = (ArrayList<HuanxinUser>) obj; if (list.size() == 1) { for (HuanxinUser huanxinUser : list) { UserDetailVO userDetailVO = new UserDetailVO(); if (TextUtils.isEmpty(huanxinUser.getUid())) { userDetailVO.userId = userId; } else { userDetailVO.userId = huanxinUser.getUid(); } userDetailVO.name = huanxinUser.getName(); userDetailVO.picture_1 = huanxinUser.getAvatar(); userDetailVO.sex = huanxinUser.sex; userDetailVO.creditworthiness = huanxinUser.creditworthiness; userDetailVO.earnest_money = huanxinUser.earnest_money; userDetailVO.certification = huanxinUser.certification; userDetailVO.age = huanxinUser.age; userDetailPagerAdapter.cache.put(huanxinUser.getUid() != null ? huanxinUser.getUid() : userDetailVO.userId, userDetailVO); helper.reflesh(userDetailVO, initContent); } } } userDetailPagerAdapter.userDetailActivity.showWait(false); } @Override public void failed(Object obj) { ArrayList<HuanxinUser> huanxinUsers = ConstantForSaveList.usersNick; if (huanxinUsers != null) { for (HuanxinUser huanxinUser : huanxinUsers) { if (huanxinUser == null) { continue; } if (huanxinUser.getUid() != null && huanxinUser.getUid().equals(userId)) { UserDetailVO udVO = new UserDetailVO(); if (TextUtils.isEmpty(huanxinUser.getUid())) { udVO.userId = userId; } else { udVO.userId = huanxinUser.getUid(); } udVO.name = huanxinUser.getName(); udVO.picture_1 = huanxinUser.getAvatar(); udVO.sex = huanxinUser.sex; udVO.creditworthiness = huanxinUser.creditworthiness; udVO.earnest_money = huanxinUser.earnest_money; udVO.certification = huanxinUser.certification; udVO.age = huanxinUser.age; helper.reflesh(udVO, initContent); return; } } } userDetailPagerAdapter.userDetailActivity.showWait(false); Toast.makeText(getActivity(), getString(R.string.get_failed), Toast.LENGTH_SHORT).show(); } } } }