Как я могу перейти к другой деятельности после нажатия на определенную страницу в ViewPager? - PullRequest
0 голосов
/ 03 ноября 2019

У меня проблема с переходом к следующему занятию в ViewPager Когда я перехожу к другому занятию, я создал «Слайд-изображение» в первом занятии;который имеет пять изображений. После того, как я сдвину последнее изображение (пятое), оно должно перейти к следующему действию, скажем-activity_next.xml.

My RoomSelect class:

          mslidViewPager = (ViewPager) findViewById(R.id.slideViewPager);

           sliderAdapter=new SliderAdapter(this);

           mslidViewPager.setAdapter(sliderAdapter);

Мой класс слайдерактивности

  public String[] slide_headings = {
        "DELUX",
        "SEMI DELUX",
        "Dormitory"
  };

  public String[] s1= {
        "Apply for Delux",
        "Apply for Semi-Delux",
        "Apply for Dormitory"

  };


  public Object instantiateItem(@NonNull ViewGroup container, final int position) { 

     layoutInflater =(LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
     View view=layoutInflater.inflate(R.layout.slide_layout,container,false);



     imageView.setImageResource(slide_images[position]);
     slideHeading.setText(slide_headings[position]);
     slideDes.setText(slide_descrpition [position]);
     but.setText(s1 [position]);





     view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
                if(position==0) {
                    Toast.makeText(context, "delux", Toast.LENGTH_SHORT).show();

                }
                else if (position==1) {
                    Toast.makeText(context, "semi-delux", Toast.LENGTH_SHORT).show();
                }
                else {
                    Toast.makeText(context, "Dormitory", Toast.LENGTH_SHORT).show();

                }
        }
    });

    container.addView(view);

    return view;
}

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

В адаптере:

override fun instantiateItem(container: ViewGroup, position: Int): Any {
    val inflater = LayoutInflater.from(context)
    val itemView = context.layoutInflater.inflate(R.layout.row, container, false) as ViewGroup
    val heading = itemView.findViewById(R.id.textView) as TextView
    if (position < list.size)
        heading.setText(list[position])
    container.addView(itemView)

    return itemView

}

override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
    container.removeView(`object` as LinearLayout)
}

override fun isViewFromObject(view: View, `object`: Any): Boolean {
    return view === `object`
}

override fun getCount(): Int {
    return list.size+1
}

Внутренняя активность:

 viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
        override fun onPageScrollStateChanged(state: Int) {

        }

        override fun onPageScrolled(
            position: Int,
            positionOffset: Float,
            positionOffsetPixels: Int
        ) {

        }

        override fun onPageSelected(position: Int) {
            if (position == list.size) {
                startActivity(Intent(this@MainActivity, SecondActivity::class.java))
            }

        }

    })
0 голосов
/ 03 ноября 2019

лучший способ - сделать «фальшивый слайд» или «фиктивный слайд» в качестве последнего слайда (без содержимого), чтобы при переходе по «фальшивому слайду» он переходил к другому виду деятельности

сначала сделайте свой «поддельный слайд», добавив его в класс, который расширяет PagerAdapter:

 @Override
public int getCount() {
    return s1.length+1;//in your example it turns to be 4
}

и поместите все настройки просмотра в условие:

 @Override
public Object instantiateItem(@NonNull final ViewGroup container, final int position) {
    layoutInflater =(LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
    View view=layoutInflater.inflate(R.layout.slide_layout,container,false);
    imageView.setImageResource(slide_images[position]);
    if(position<=s1.length-1) {
        slideHeading.setText(slide_headings[position]);
        slideDes.setText(slide_descrpition [position]);
        but.setText(s1 [position]);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(position==0) {
                    Toast.makeText(context, "delux", Toast.LENGTH_SHORT).show();

                }
                else if (position==1) {
                    Toast.makeText(context, "semi-delux", Toast.LENGTH_SHORT).show();
                }
                else {
                    Toast.makeText(context, "Dormitory", Toast.LENGTH_SHORT).show();

                }
              }
            });


   }
   container.addView(view);
   return view;

}

и, наконец, добавьтеэтот слушатель в вашем классе RoomSelect:

mslidViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i1) {
        }

        @Override
        public void onPageSelected(int i) {
            sum=0;
            if(i==3)//same as the the amount of your slides {
                mslidViewPager.setCurrentItem(2);//so when you turn back to MyRoomSelect activity you face your last slide
                startActivity(new Intent(MyRoomSelectActivity.this, NextActivity.class));
            }
        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });

Ps рассмотрите возможность использования arrayList вместо string [] и передачи arrayList в качестве конструктора ваших адаптеров. надеюсь, это поможет:)

...