如何从适配器内部的活动更改变量(传递给它的java类更改变量)

问题描述 投票:1回答:1

我的活动的值为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值指针吗?如果我在听众内部进行了更改,那么是否应该在外部进行更改?

java android
1个回答
0
投票

您可以将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
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.