已解決(我只需要將FragmentPagerAdapter
更改爲FragmentStatePagerAdapter
,因爲最後一個保存了屏幕中不可見的片段的狀態,所以GridView的大小不斷增加。 ,這是不可見的,內存,信息可能泄漏,活動可能會被破壞,這是GridView發生的情況(下面的問題)添加FragmentStatePagerAdapter
將保存片段的狀態,當它再次變爲可見時當PageAdapter(Android)
我是開發一個在線購物應用程序由於我必須展示大量的產品,我使用了很多分類,我使用的一個主要功能是帶有PageAdapter的ViewPager,在每個片段中它應該是不同的l ayouts。在其中一個片段中,我使用了一個GridView。問題是,當我在頁面之間切換時,我回到第一頁GridView的大小,內部元素的數量不斷增加。例如,如果我有12種元素的開頭,以後我切換頁面,然後回來再變成24,36等
下面是我用這個代碼: EbuyHomeScreen.class
public class EbuyHomeScreen extends FragmentActivity {
@SuppressLint("InlinedApi") protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ebuy_home_screen);
/** Getting a reference to the ViewPager defined the layout file */
ViewPager pager = (ViewPager) findViewById(R.id.pager);
/** Getting fragment manager */
FragmentManager fm = getSupportFragmentManager();
/** Instantiating FragmentPagerAdapter */
EbuyFragmentPagerAdapter pagerAdapter = new EbuyFragmentPagerAdapter(fm);
/** Setting the pagerAdapter to the pager object */
pager.setAdapter(pagerAdapter);
}
EbuyFragmentPagerAdapter
public class EbuyFragmentPagerAdapter extends FragmentStatePagerAdapter{
final int PAGE_COUNT = 3;
/** Constructor of the class */
public EbuyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
/** This method will be invoked when a page is requested to create */
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
EbuyFragmentLatest myFragmentLatest = new EbuyFragmentLatest();
return myFragmentLatest;
case 1:
EbuyFragmentSold myFragmentSold = new EbuyFragmentSold();
return myFragmentSold;
case 2:
EbuyFragmentSponsored myFragmentSponsored = new EbuyFragmentSponsored();
return myFragmentSponsored;
default:
EbuyFragmentLatest myFragmentLatestDefault = new EbuyFragmentLatest();
return myFragmentLatestDefault;
}
}
/** Returns the number of pages */
@Override
public int getCount() {
return PAGE_COUNT;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
/** code for returning the title*/ }
}
}
EbuyFragmentLatest
public class EbuyFragmentLatest extends Fragment {
final ArrayList<EbuyItem> ebuy_data = new ArrayList<EbuyItem>();
private EbuyItemAdapter customAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.ebuy_home_fragment_latest,
container, false);
JazzyGridView mGrid = (JazzyGridView)v.findViewById(R.id.ebuy_list);
mGrid.setTransitionEffect(JazzyHelper.TILT);
ebuy_data.add(new EbuyItem("http://www.ebuy.al/Images/dsc/8884_400_300.jpg","Fustan Glamour","2,500L [17.9 €]"));
/*
** filing with data continues */
customAdapter = new EbuyItemAdapter(
container.getContext(), ebuy_data);
mGrid.setAdapter(customAdapter);
return v;
}
}
EbuyItemAdapter
public class EbuyItemAdapter extends BaseAdapter {
private ArrayList<EbuyItem> ebuy_data;
private LayoutInflater layoutInflater;
public EbuyItemAdapter(Context context, ArrayList<EbuyItem> ebuy_data) {
this.ebuy_data = ebuy_data;
layoutInflater = LayoutInflater.from(context);
}
public int getCount() {
return ebuy_data.size();
}
public Object getItem(int position) {
return ebuy_data.get(position);
}
public long getItemId(int position) {
return position;
}
@SuppressLint({ "DefaultLocale", "InflateParams" })
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.ebuy_item, null);
holder = new ViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.name);
holder.price = (TextView) convertView.findViewById(R.id.price);
holder.image = (ImageView) convertView
.findViewById(R.id.ebuy_image);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.name.setText(((EbuyItem) ebuy_data.get(position)).getName());
holder.price.setText(((EbuyItem) ebuy_data.get(position)).getPrice());
UrlImageViewHelper.setUrlDrawable(holder.image,
((EbuyItem) ebuy_data.get(position)).getImageUrl(),
R.drawable.loading);
return convertView;
}
static class ViewHolder {
TextView name;
TextView price;
ImageView image;
}
}