Использование кнопок в 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, так как у него есть кнопка, тогда как другие макеты содержат только изображения и текст, которые не требуют взаимодействия.

Я работаю над этим уже бесчисленное количество часов и до сих пор не могу найти способ решить эту проблему. Я был бы очень признателен, если бы вы могли помочь мне с этим.


person kibria3    schedule 14.03.2012    source источник
comment
Я не совсем понимаю, о чем ваш вопрос. Вы пытаетесь понять, как сделать макет для представления с помощью кнопки? Или вы пытаетесь понять, как создать намерение начать действие? Или что-то другое? Пока код выглядит нормально. Если вы можете предоставить свои макеты и любой LogCat, который показывает ошибку, это также будет полезно при ответе на ваш вопрос.   -  person louielouie    schedule 14.03.2012
comment
Я предоставил макеты в операторе switch, но в одном из макетов есть кнопка. Я хочу, чтобы эта кнопка создавала намерение начать действие. Я попытался создать намерение и запустить действие в операторе switch, но компилятор не принимает его, он не распознает аргументы этого намерения и метод startActivity.   -  person kibria3    schedule 14.03.2012


Ответы (2)


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

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

P.S. вы не можете сделать 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;
person Shereef Marzouk    schedule 15.03.2012
comment
Я попробую это, а также ответ ниже, спасибо за вашу помощь, я очень ценю это. - person kibria3; 17.03.2012

Похоже, вы хотите создать намерение, а затем начать с ним действие. Вы можете использовать контекст из «коллекции», к которой вы уже обращаетесь. Вот некоторый код, который должен заставить вас снова работать:

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

Обратите внимание, что вам, вероятно, придется сделать коллекцию окончательной.

person louielouie    schedule 15.03.2012
comment
Пробовал, были проблемы с этим, но удалось разобраться и попробовать самому, спасибо за помощь! - person kibria3; 21.03.2012