void dataSetChanged() {
// This method only gets called if our observer is attached, so mAdapter is non-null.
final int adapterCount = mAdapter.getCount();
mExpectedAdapterCount = adapterCount;
boolean needPopulate = mItems.size() < mOffscreenPageLimit * 2 + 1 &&
mItems.size() < adapterCount;
int newCurrItem = mCurItem;
boolean isUpdating = false;
for (int i = 0; i < mItems.size(); i++) {
final ItemInfo ii = mItems.get(i);
final int newPos = mAdapter.getItemPosition(ii.object);
if (newPos == PagerAdapter.POSITION_UNCHANGED) {
continue;
}
if (newPos == PagerAdapter.POSITION_NONE) {
mItems.remove(i);
i--;
if (!isUpdating) {
mAdapter.startUpdate(this);
isUpdating = true;
}
mAdapter.destroyItem(this, ii.position, ii.object);
needPopulate = true;
if (mCurItem == ii.position) {
// Keep the current item in the valid range
newCurrItem = Math.max(0, Math.min(mCurItem, adapterCount - 1));
needPopulate = true;
}
continue;
}
if (ii.position != newPos) {
if (ii.position == mCurItem) {
// Our current item changed position. Follow it.
newCurrItem = newPos;
}
ii.position = newPos;
needPopulate = true;
}
}
if (isUpdating) {
mAdapter.finishUpdate(this);
}
Collections.sort(mItems, COMPARATOR);
if (needPopulate) {
// Reset our known page widths; populate will recompute them.
final int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = getChildAt(i);
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
if (!lp.isDecor) {
lp.widthFactor = 0.f;
}
}
setCurrentItemInternal(newCurrItem, false, true);
requestLayout();
}
}
public int getItemPosition(Object object) {
return POSITION_UNCHANGED;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
if (mCurTransaction == null) {
mCurTransaction = mFragmentManager.beginTransaction();
}
final long itemId = getItemId(position);
// Do we already have this fragment?
String name = makeFragmentName(container.getId(), itemId);
Fragment fragment = mFragmentManager.findFragmentByTag(name);
if (fragment != null) {
if (DEBUG) Log.v(TAG, "Attaching item #" + itemId + ": f=" + fragment);
mCurTransaction.attach(fragment);
} else {
fragment = getItem(position);
if (DEBUG) Log.v(TAG, "Adding item #" + itemId + ": f=" + fragment);
mCurTransaction.add(container.getId(), fragment,
makeFragmentName(container.getId(), itemId));
}
if (fragment != mCurrentPrimaryItem) {
fragment.setMenuVisibility(false);
fragment.setUserVisibleHint(false);
}
return fragment;
}
private static String makeFragmentName(int viewId, long id) {
return "android:switcher:" + viewId + ":" + id;
}
/**
* Return a unique identifier for the item at the given position.
*
* <p>The default implementation returns the given position.
* Subclasses should override this method if the positions of items can change.</p>
*
* @param position Position within this adapter
* @return Unique identifier for the item at position
*/
public long getItemId(int position) {
return position;
}
int id=1;
Map<String,Integer> IdsMap=new HashMap<>();
List<String> preIds=new ArrayList<>();
@Override
public void notifyDataSetChanged() {
for(MenuInfo info:data){
if(!IdsMap.containsKey(info.getTitle())){
IdsMap.put(info.getTitle(),id++);
}
}
super.notifyDataSetChanged();
preIds.clear();
int size=getCount();
for(int i=0;i<size;i++){
preIds.add((String) getPageTitle(i));
}
}
@Override
public int getItemPosition(Object object) {
ItemFragment fragment= (ItemFragment) object;
String title=fragment.getTitle();
int preId = preIds.indexOf(fragment.getTitle());
int newId=-1;
int i=0;
int size=getCount();
for(;i<size;i++){
if(getPageTitle(i).equals(fragment.getTitle())){
newId=i;
break;
}
}
if(newId!=-1&&newId==preId){
Log.i("zgh","title="+title+" POSITION_UNCHANGED");
return POSITION_UNCHANGED;
}
if(newId!=-1){
Log.i("zgh","title="+title+" newId="+newId);
return newId;
}
Log.i("zgh","title="+title+" POSITION_NONE");
return POSITION_NONE;
}
@Override
public long getItemId(int position) {
return IdsMap.get(getPageTitle(position));
}
package com.trs.xizang.gov.adapter;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.util.Log;
import android.view.ViewGroup;
import com.trs.lib.base.TRSUrlFragment;
import com.trs.lib.bean.TRSMenu;
import com.trs.lib.fragment.base.SimpleTitleFragment;
import com.trs.xizang.gov.bean.MenuInfo;
import com.trs.xizang.gov.fragment.ItemFragment;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by zhuguohui on 2016/5/12.
*/
public class MenuInfoPageAdapter extends FragmentPagerAdapter {
List<MenuInfo> data;
int id=1;
Map<String,Integer> IdsMap=new HashMap<>();
List<String> preIds=new ArrayList<>();
public MenuInfoPageAdapter(FragmentManager manager, List<MenuInfo> data){
super(manager);
this.data= data==null? new ArrayList<MenuInfo>() :data;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Fragment getItem(int position) {
ItemFragment fragment=new ItemFragment();
Bundle bundle=new Bundle();
bundle.putString(TRSUrlFragment.KEY_URL,data.get(position).getUrl());
bundle.putString(TRSUrlFragment.KEY_TITLE, data.get(position).getTitle());
fragment.setArguments(bundle);
return fragment;
}
@Override
public CharSequence getPageTitle(int position) {
return data.get(position).getTitle();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
return super.instantiateItem(container, position);
}
@Override
public long getItemId(int position) {
return IdsMap.get(getPageTitle(position));
}
@Override
public int getItemPosition(Object object) {
ItemFragment fragment= (ItemFragment) object;
String title=fragment.getTitle();
int preId = preIds.indexOf(fragment.getTitle());
int newId=-1;
int i=0;
int size=getCount();
for(;i<size;i++){
if(getPageTitle(i).equals(fragment.getTitle())){
newId=i;
break;
}
}
if(newId!=-1&&newId==preId){
Log.i("zgh","title="+title+" POSITION_UNCHANGED");
return POSITION_UNCHANGED;
}
if(newId!=-1){
Log.i("zgh","title="+title+" newId="+newId);
return newId;
}
Log.i("zgh","title="+title+" POSITION_NONE");
return POSITION_NONE;
}
@Override
public void notifyDataSetChanged() {
for(MenuInfo info:data){
if(!IdsMap.containsKey(info.getTitle())){
IdsMap.put(info.getTitle(),id++);
}
}
super.notifyDataSetChanged();
preIds.clear();
int size=getCount();
for(int i=0;i<size;i++){
preIds.add((String) getPageTitle(i));
}
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有