我的活动的值为Sound selectedToe
。我希望我的soundPageChangeListener
能够更新活动的selectedToe
,所以我像这样传递selectedToe
:
SoundPageChangeListener soundPageChangeListener = new SoundPageChangeListener(soundsToe, selectedToe);
但是,当我在selectedToe
中更改soundPageChangeListener
时:
public class SoundPageChangeListener implements ViewPager.OnPageChangeListener {
private ArrayList<Sound> sounds;
Sound currentSound;
public SoundPageChangeListener(ArrayList<Sound> sounds, Sound currentSound) {
this.sounds = sounds;
this.currentSound = currentSound;
}
@Override
public void onPageSelected(int position) {
Sound sound = sounds.get(position);
currentSound = sound;
}
活动上的selectedToe
仍为null
。
不是所有的Java值指针吗?如果我在听众内部进行了更改,那么是否应该在外部进行更改?
您可以将SoundPageChangeListener
作为活动的内部类,因此侦听器可以访问Activity selectedToe
变量。拥有内部类将使此类SoundPageChangeListener
具有可见性并可以访问您的活动selectedToe
变量。
在创建新的类实例时,指针不会保留在您的方案中。您正在分配currentSound
而不是指向内存地址。
然后在onPageSelected
中为selectedToe
分配sound
class YourActivity {
...
Sound selectedToe = currentSound // set the default sound if any
// Inside the activity, declare your listener
public class SoundPageChangeListener implements ViewPager.OnPageChangeListener {
private ArrayList<Sound> sounds;
// only the sound list is required here
public SoundPageChangeListener(ArrayList<Sound> sounds) {
this.sounds = sounds;
}
@Override
public void onPageSelected(int position) {
Sound sound = sounds.get(position);
YourActivity.this.selectedToe = sound
}
}
}