java - 如何从我的适配器内的活动中更改变量(传递给它的 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值指针吗?如果我在听众内部改变了一些东西,它不应该在外面改变吗?
解决方案
您可以制作SoundPageChangeListener
活动的内部类,以便侦听器可以访问活动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
}
}
}
推荐阅读
- node.js - 从 Express 中间件在整个节点应用程序中共享令牌
- java - Spring Data Elasticsearch 4.2.x:DateFormat 抛出空指针
- javascript - 如何使用 d3-contour 绘制简单的 2D 等高线图?
- wcag - 为了确保 WCAG 1.4.11“非文本对比度”的通过对比度,我是否将 :hover 的“颜色”属性与非悬停颜色或背景进行比较?
- r - 在拆分元素之前合并
- javascript - [[scope]] 键内的块是什么以及它是何时创建的?
- scikit-learn - 更改 OneclassSVM 中预测函数的输出类标签值
- dynamic - 在数据库中存储页脚部分
- flutter - 在 BLoC 中打开数据库表,在 MyApp 中处理 - 这有效吗?
- video-streaming - 在 Dash.JS 中处理视频的代码部分是什么?