2012-03-14 65 views
1

我正嘗試使用ViewPager,用戶可以在每個窗格中進行交互。對於這個ViewPager,我創建了一個教程,讓我們向用戶展示水平滑動切換窗格。當用戶到達最後一個窗格時,會向用戶顯示一個按鈕,在這裏他們將被導航到儀表板。我已經閱讀了一些文章,試圖瞭解按鈕在ViewPager中的工作方式,但是沒有多大意義。在ViewPager中使用按鈕

代碼應該做的事情是,當點擊ViewPager中一個窗格中的按鈕時,儀表板活動就會啓動。

這裏是pagerAdapter的全碼:

class MyPagerAdapter extends PagerAdapter { 

public int getCount() { 

    return 5; 
} 

public Object instantiateItem(View collection, int position) { 

    View v = new View(collection.getContext()); 

    LayoutInflater inflater = (LayoutInflater) collection.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    int resId = 0; 
    switch (position) { 
    case 0: 
     resId = R.layout.tutorial_step1; 
    break; 

    case 1: 
     resId = R.layout.tutorial_step2; 

    break; 

    case 2: 
     resId = R.layout.tutorial_step3; 
    break; 

    case 3: 
     resId = R.layout.tutorial_step4; 

    break; 

    case 4: 
     resId = R.layout.tutorial_complete; 
     v = inflater.inflate(R.layout.tutorial_complete, null, false); 
     LinearLayout l = (LinearLayout) v.findViewById(R.id.llComplete); 
     Button button=(Button)l.findViewById(R.id.bTutorialComplete); 
     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       //Create an intent that starts a different activity 
      } 
     }); 
     break; 
    } 
    ((ViewPager) collection).addView(v, 0); 

    return v; 

} 

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

} 

@Override 
public boolean isViewFromObject(View arg0, Object arg1) { 
    return arg0 == ((View) arg1); 

} 

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

從我的文章都看過,我應該與使用的代碼是:

public Object instantiateItem(View collection, int position) { 

    View v = new View(collection.getContext()); 

    LayoutInflater inflater = (LayoutInflater) collection.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    int resId = 0; 
    switch (position) { 
    case 0: 
     resId = R.layout.tutorial_step1; 
    break; 

    case 1: 
     resId = R.layout.tutorial_step2; 

    break; 

    case 2: 
     resId = R.layout.tutorial_step3; 
    break; 

    case 3: 
     resId = R.layout.tutorial_step4; 

    break; 

    case 4: 
     resId = R.layout.tutorial_complete; 
     v = inflater.inflate(R.layout.tutorial_complete, null, false); 
     LinearLayout l = (LinearLayout) v.findViewById(R.id.llComplete); 
     Button button=(Button)l.findViewById(R.id.bTutorialComplete); 
     button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       //Create an intent that starts a different activity 
      } 
     }); 
     break; 
    } 
    ((ViewPager) collection).addView(v, 0); 

    return v; 

} 

只有case 4:switch聲明我正在處理,因爲這有一個按鈕,而其他佈局只包含圖像和文本,不需要交互。

我一直在爲此工作無數小時,仍然無法找出解決方法。如果你能幫助我,我將非常感激。

+0

我真的不知道你的問題是。你想知道如何使用按鈕製作視圖的佈局嗎?或者你想知道如何創建一個啓動活動的意圖?或者是其他東西?代碼看起來沒問題。如果您可以提供您的佈局和任何顯示錯誤的LogCat,那麼在回答您的問題時也會有所幫助。 – louielouie 2012-03-14 05:48:43

+0

我在switch語句中提供了佈局,但其中一個佈局有一個按鈕。我想要那個按鈕來創建一個啓動活動的意圖。我嘗試創建一個intent並在switch語句中啓動一個活動,但編譯器不接受它,它不識別這個intent參數和startActivity方法。 – kibria3 2012-03-14 11:01:18

回答

4
final Context context = collection.getContext(); 
    button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      context.startActivity(new Intent(context, Dashboard.class)); 
     } 
    }); 
    break; 

P.你不能讓collectionfinal因爲該方法instantiateItem@Override

提示:如果你想這是不同的頁面,你可以把你的代碼switch(position)

LayoutInflater inflater = (LayoutInflater) collection.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE) 
View v = null; 
switch (position) { 
    case 0: 
     v = inflater.inflate(R.layout.somelayout); 
     Button btn = (Button) v.findViewById(R.id.somebutton); 
     btn.setText("btn"); 
    break; 

    case 1: 
     v = inflater.inflate(R.layout.someotherlayout); 
     TextView tv = (Button) v.findViewById(R.id.sometextview); 
     tv.setText("btn"); 
    break; 
} 

((ViewPager) collection).addView(v, 0); 
return v; 
+0

我會給出這個以及下面的答案,謝謝你的幫助,我真的很感激它。 – kibria3 2012-03-17 12:50:46

+1

這工作完美,非常感謝你! – kibria3 2012-03-20 22:43:30

1

它看起來像你想創建一個意圖,然後開始一個活動。您可以使用您正在訪問的「收集」中的上下文。這裏有一些代碼應該讓你再次去:

public void onClick(View v) { 
    Context context = collection.getContext(); 
    Intent intent = new Intent(context, DashboardActivity.class); 
    context.startActivity(intent); 
} 

請注意,您可能必須使收集成爲最終。

+0

好的,非常感謝你,我會放棄這一切! – kibria3 2012-03-17 12:50:06

+0

試了一下,遇到了問題,但設法瞭解並親自嘗試一下,謝謝你的幫助! – kibria3 2012-03-20 22:44:33