Не удалось реализовать OnBackPress - PullRequest
0 голосов
/ 01 августа 2020

У меня меньше 2 Java файлов классов (основной и адаптер).
Я хочу останавливать звук, когда нажата кнопка возврата, но мои попытки исчерпаны.
Когда кнопка возврата нажата, она должна go к третьему действию.
Итак, мне нужна помощь.

Основной класс

public class myClass extends AppCompatActivity {
ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_one);

    viewPager = (ViewPager) findViewById(R.id.pagerOne);
    PagerAdapter viewPagerAdapter = new PagerAdapter(this);
    viewPager.setAdapter(viewPagerAdapter);}
}



Класс адаптера

public class MyPagerAdapter extends PagerAdapter {
Context context;
LayoutInflater inflater;
MediaPlayer mp;
public int[] images = { R.drawable.img1,R.drawable.img2 };
public String[] title = { "Image1","Image2" };
public PagerAdapter(Context context) { this.context = context; }

@Override
public int getCount() { return title.length; }

@Override
public boolean isViewFromObject(View view, Object object) { return (view == object); }

@Override
public Object instantiateItem(ViewGroup container, final int position) {
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.activity_custlayout,container,false);
    ImageView slide = view.findViewById(R.id.myView);
    TextView text= view.findViewById(R.id.txt);
    slide.setImageResource(images[position]);
    text.setText(title[position]);
    releaseMediaPlayer();

    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) { releaseMediaPlayer();
            if (position == 0){ setupMediaPlayer(R.raw.lion); }
            else if (position == 1){ setupMediaPlayer(R.raw.tiger); }
            else { setupMediaPlayer(R.raw.tortoise);}
        }
    }); container.addView(view); return view;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) { releaseMediaPlayer(); container.removeView((ConstraintLayout)object); }
public void setupMediaPlayer(int resource) { mp = MediaPlayer.create(context, resource); mp.start(); }
public void releaseMediaPlayer() { if (mp != null) { mp.stop(); mp.release(); mp = null; } }
}



Неудачная попытка
Я попытался освободить звук из основного класса, как показано ниже, но это не сработало.
PagerAdapter pagerAdapter = new PagerAdapter(this);
pagerAdapter.releaseMediaPlayer();

1 Ответ

1 голос
/ 01 августа 2020

Вы должны переопределить обратный вызов onBackPressed() в своем классе Main, а также убедиться, что вы используете тот же экземпляр PagerAdapter.

Вот как вы должны это делать

public class myClass extends AppCompatActivity {
ViewPager viewPager;
MyPagerAdapter myPagerAdapter; // Move the variable here

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

    viewPager = (ViewPager) findViewById(R.id.pagerOne);
    myPagerAdapter = new MyPagerAdapter(this); // Modify this line
    viewPager.setAdapter(viewPagerAdapter);}
}

@Override
protected void onBackPressed() {
    myPagerAdapter.releaseMediaPlayer();
    // Go to 3rd Activity
}

В любом случае, вы звоните PagerAdapter напрямую, тогда как на самом деле вам следует использовать свой MyPagerAdapter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...