Android 无法实现OnBackPress

Android 无法实现OnBackPress,android,android-studio,Android,Android Studio,我有以下两个Java类文件(主文件和适配器)。我想在按下“后退”按钮时停止音频,但尝试已用尽。按下“后退”按钮时,它应转到第三个活动。因此,我正在寻求帮助。主类 public class myClass extends AppCompatActivity { ViewPager viewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceStat

我有以下两个Java类文件(主文件和适配器)。
我想在按下“后退”按钮时停止音频,但尝试已用尽。
按下“后退”按钮时,它应转到第三个活动。
因此,我正在寻求帮助。

主类

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; } }
}


适配器类

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=新的PagerAdapter(此)
pagerAdapter.releaseMediaPlayer()

您应该重写
Main
类中的
onBackPressed()
回调,并确保使用的是
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

谢谢你@Franz,这正是我要找的:-)当然,很高兴它帮了你:)