1

我正在尝试使用 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我正在使用的语句中,因为它有一个按钮,而其他布局只包含不需要交互的图像和文本。

我已经为此工作了无数个小时,但仍然无法找到解决此问题的方法。如果您能帮助我解决这个问题,我将不胜感激。

4

2 回答 2

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

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

ps你不能做collection final,因为方法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;
于 2012-03-15T07:20:54.290 回答
1

看起来你想创建一个意图,然后用它开始一个活动。您可以使用您已经访问的“集合”中的上下文。这里有一些代码可以让你重新开始:

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

请注意,您可能必须使集合成为最终的。

于 2012-03-15T03:36:15.007 回答