2013-01-21 54 views
4

我試圖第一次構建viewpager。我在主onCreate方法中填充一個ArrayList的視圖並將它傳遞給PagerAdapter的構造函數。活動啓動正常,我可以看到ViewPager(或至少它的背景),但沒有任何視圖出現在它中,我只看到空白背景。我嘗試過膨脹佈局XML,我知道它們在其他小部件中工作,所以它不會成爲一個問題。我猜測它與我編寫instantiateObject方法的方式有關。總之,這裏是我的適配器:viewpager中沒有出現的視圖

public class StoryAdapter extends PagerAdapter { 
    private Context ctx; 
    private ViewBuilder viewBuilder; 

    public StoryAdapter(Context ctx, ArrayList<View> views){ 
     this.ctx = ctx; 
    } 


    @Override 
    public int getCount() {   
     return views.size(); 
    } 

    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public Object instantiateItem(View arg0, int arg1) { 
      View v = views.get(arg1); 
      ((ViewPager) arg0).addView(v); 
      return v; 
      } 

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

} 
} 

這裏是我的onCreate():

public class ShowStory extends Activity { 
public int totalPages; 
Button backBtn; 
public String text; 
public ArrayList<View> views; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_show_story); 

    backBtn = (Button)findViewById(R.id.backBtn); 

    backBtn.setOnClickListener(new OnClickListener() { 
     public void onClick(View view){ 
      Intent intent = new Intent(); 
      setResult(RESULT_CANCELED, intent);   
      finish();  
     } 
    }); 
    ViewPager vp = (ViewPager)findViewById(R.id.storyFlipper); 
    views = new ArrayList<View>(); 

    View v0 = getLayoutInflater().inflate(R.layout.galleryview, null); 

    TextView v0t = (TextView)v0.findViewById(R.id.headline); 
    v0t.setText("COVER1"); 

    View v1 = getLayoutInflater().inflate(R.layout.coverpage, null); 
//  TextView v1t = (TextView)findViewById(R.id.coverText); 
//  v1t.setText("COVER2");  

    View v2 = getLayoutInflater().inflate(R.layout.coverpage, null); 
//  TextView v2t = (TextView)findViewById(R.id.coverText); 
//  v2t.setText("COVER3"); 

views.add(v0); 
views.add(v1); 
views.add(v2); 


    StoryAdapter sa = new StoryAdapter(this, views);   
    vp.setAdapter(sa); 

PS我這樣做主要是爲了教育目的,這顯然是一個很簡單的例子。任何幫助將不勝感激!

------編輯:我想你的建議:

 @Override 
    public Object instantiateItem(View collection, int position) { 
    LayoutInflater inflater = (LayoutInflater) collection.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    int resId = 0; 
    switch (position) { 

    case 0: 
     resId = R.layout.coverpage; 
     break; 
    case 1: 
     resId = R.layout.coverpage; 
     break; 
    case 2: 
     resId = R.layout.coverpage; 
     break; 
    case 3: 
     resId = R.layout.coverpage; 
     break; 

    } 
    View view = inflater.inflate(resId, null); 
    ((ViewPager) collection).addView(view, 0); 
    return view; 

    } 

,並有同樣的結果 - 我看到了viewpager的空白背景,但沒有意見出現

回答

19

我想通了 - 那是因爲我沒有在isViewFromObject方法什麼。用

替換null
return arg0 == (View) arg1; 

解決了這個問題。

+1

他們爲什麼不讓isViewFromObject()抽象!?不管怎樣,謝謝!你幫了我。 –

+0

謝謝。很好的幫助 –

0

我想這些視圖需要在instantiateItems方法內膨脹。這是我做的:

@Override 
public Object instantiateItem(View collection, int position) { 
LayoutInflater inflater = (LayoutInflater) collection.getContext() 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

int resId = 0; 
switch (position) { 

case 0: 
    resId = R.layout.first_layout_id; 

    break; 
case 1: 
    resId = R.layout.layout_id; 
    break; 
case 2: 
    resId = R.layout.layout_id; 
    break; 
case 3: 
    resId = R.layout.layout_id; 
    break; 

} 

View view = inflater.inflate(resId, null); 
((ViewPager) collection).addView(view, 0); 
return view; 

} 
+0

請參閱我的編輯 – drewmoore

相關問題