0

ExpandableListView幾乎爲空。我真的不知道什麼是浪費了太多的記憶。 大量滾動(約60次上下)後,應用程序停止響應。我做了一些調查,發現只有在targetSdkVersions 8到13時纔會出現此錯誤。對於版本14和更高版本,一切正常。 我的應用程序使用ViewPager的android支持庫v4和ViewPagerIndicator。 這是一個討厭的錯誤,或者是我的代碼有問題嗎?Viewpager片段中ExpandableListView的上下滾動導致內存不足錯誤

package com.test.test; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.os.Parcelable; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.ExpandableListAdapter; 
import android.widget.ExpandableListView; 

import com.viewpagerindicator.TabPageIndicator; 

public class MainActivity extends Activity{ 

    public ExpandableListAdapter mAdapter; 
    final String[] page_titles = new String[]{"page1","page2"}; 


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

     //Instantiating the adapter 
     myAdapter mAdapter = new myAdapter(this); 

     //instantiate the Views 
     ViewPager mPager = (ViewPager)findViewById(R.id.pager); 
     mPager.setAdapter(mAdapter); 

     TabPageIndicator mIndicator = (TabPageIndicator)findViewById(R.id.indicator); 
     mIndicator.setViewPager(mPager);    
    } 

    private class myAdapter extends PagerAdapter{ 
     Context context; 

     public myAdapter(Context c){ 
      this.context = c; 
     } 

     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return page_titles.length; 
     } 

     @Override 
     public boolean isViewFromObject(View v, Object o) { 
      // TODO Auto-generated method stub 
      return v.equals(o); 
     } 

     public CharSequence getPageTitle(int position) { 
      return page_titles[position]; 
     } 

     public Object instantiateItem(View pager, int position) { 
      final LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      View v = inflater.inflate(R.layout.expander, null, false); 
      ExpandableListView elv1 = (ExpandableListView) v.findViewById(R.id.elv1); 

      MainActivity.this.mAdapter = new BaseExpandableListAdapter() { 

       @Override 
       public Object getChild(int groupPosition, int childPosition) { 
        return null; 
       } 

       @Override 
       public long getChildId(int groupPosition, int childPosition) { 
        return 0; 
       } 

       @Override 
       public int getChildrenCount(int groupPosition) { 
        return 1;          
       } 

       @Override 
       public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
        View v = inflater.inflate(R.layout.childview, null, false); 

        return v; 
       } 

       @Override 
       public Object getGroup(int groupPosition) { 
        return null; 
       } 

       @Override 
       public int getGroupCount() { 
        return 20; 
       } 

       @Override 
       public long getGroupId(int groupPosition) { 
        return 0; 
       } 

       @Override 
       public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
        View v = inflater.inflate(R.layout.twolinelistitem, parent, false);                                             
        return v; 
       } 

       @Override 
       public boolean hasStableIds() { 
        return false; 
       } 

       @Override 
       public boolean isChildSelectable(int groupPosition, int childPosition) { 
        return false; 
       } 
      }; 
      elv1.setAdapter(MainActivity.this.mAdapter); 

      ((ViewPager) pager).addView(v, 0); 
      return v;         
     } 

     @Override 
     public void destroyItem(View pager, int position, Object view) { 
      ((ViewPager) pager).removeView((View) view); 
     } 

     @Override 
     public void finishUpdate(View view) { 
     } 

     @Override 
     public void restoreState(Parcelable p, ClassLoader c) { 
     } 

     @Override 
     public Parcelable saveState() { 
      return null; 
     } 

     @Override 
     public void startUpdate(View view) { 
     } 

    } 



} 

回答

1

膨脹非常內存密集型,你需要找到一種方法,並不適用於所有的列表項做一個佈局,使用一個視圖holder類或者傳呼機爲null僅膨脹。

視圖持有人應該是這樣的:

​​

,你將存儲你的佈局像這樣

ViewHolder holder = new ViewHolder(); 
holder.linearLayout = (LinearLayout) convertView.findViewById(R.id.expander); 
+0

我用了你「如果尋呼機爲null僅膨脹」的解決方案。它像一個魅力。非常感謝。如果我的聲望更高,我會投票:) – Gadja

相關問題