首页 > 解决方案 > 如何从我的适配器内的活动中更改变量(传递给它的 java 类更改变量)

问题描述

我的活动具有价值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值指针吗?如果我在听众内部改变了一些东西,它不应该在外面改变吗?

标签: javaandroid

解决方案


您可以制作SoundPageChangeListener活动的内部类,以便侦听器可以访问活动selectedToe变量。拥有一个内部类将允许该类SoundPageChangeListener具有可见性并访问您的活动selectedToe变量。

当您创建一个新的类实例时,该指针不会保留在您的场景中。您正在分配currentSound不重新指向内存地址。

然后在onPageSelected分配selectedToesound


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

推荐阅读