2015-04-15 127 views
3

在dialogFragment中我有兩個頁面的viewPager。每頁都包含一個自定義適配器。一個帶有spinners列表的適配器,另一個帶有EditTexts列表的適配器。 ViewPager很好地增加了適配器。爲什麼我的ViewPager如此之慢?

public class PageFragment extends Fragment { 
    ... 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.pagefragment_newprod, null); 

    LinearLayout ll=(LinearLayout) view.findViewById(R.id.tvLL); 
    ListView listView=new ListView(getActivity()); 
    ll.addView(listView); 

    if (pageNumber==0){ 
     dropDownAdapter=new DropDownAdapter(getActivity(), fillListAdapter); 
     listView.setAdapter(dropDownAdapter); 
    } else if (pageNumber==1){ 
     boxAdapter = new BoxAdapter(getActivity(), filledFields); 
     listView.setAdapter(boxAdapter); 
    } 
    return view; 
    } 
} 

但它起作用慢!目前的適配器(我的意思是在當前頁面)創建視圖每毫秒!看看這個:

public class BoxAdapter extends BaseAdapter{ 
... 
@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    if (view == null) { 
     view = lInflater.inflate(R.layout.addproduct_item, parent, false); 
    } 
    Log.d(LOG_TAG, "====As I said every milisecond...======"); 
    EditText editText = (EditText) view.findViewById(R.id.addProductEditText); 
    editText.setText(p.value); 
    return view; 
    } 
} 

即使當我專注於EditText這個Log.d每個毫秒寫信息! 除此之外,下一頁的適配器也起作用。我在另一個適配器getView上有其他Log.d,它在我使用不同頁面的適配器時起作用!

請幫助我瞭解什麼是錯的...(

+2

看一看[Android holder pattern](http://developer.android.com/training/improving-layouts/smooth-scrolling.html)。你應該在你的'ViewPager'中使用它。 – moictab

+0

此外,在viewPager中使用片段需要更長的時間來創建,佔用更多內存,並且更難以調試自定義視圖( - >將ViewPager的頁面更改爲customViews而不是片段)。你也可以在asynctask中填充你的列表(創建適配器,設置它)。 –

+1

沒有足夠的代碼來找出錯誤。很可能你有一些循環(無限可能),它會將數據添加到列表適配器中,並導致適配器上廣泛的notifyDatasetChanged()調用。 – mykolaj

回答

2

的問題已經在評論中解決。對於OP的解決方案顯然,除去複雜的碎片和它們的適配器。但是,我也有與ViewPager,下面的解決方案選項卡布局複雜的片段固定慢分頁問題:

viewPager.setOffscreenPageLimit(2); 

2將保持兩頁遠離內存中當前頁這是足以讓我,因爲我有三個。但請注意將太多頁面留在內存中,請參閱documentation

相關問題