Android 无法从外部类更改片段变量的值
我正在使用Android 无法从外部类更改片段变量的值,android,variables,fragment,Android,Variables,Fragment,我正在使用片段,但我无法从外部类访问其变量 目前,我有一个片段片段视图,其中有一个设置按钮。无论何时按下,它都会显示一个UI元素来定义不同的设置。我复制我拥有的代码: 片段 public static Boolean show = false; private void initSettingsPanel() { m_settingsBtn = (ImageButton) m_activity.findViewById(R.id.settingButton); /* c
片段
,但我无法从外部类访问其变量
目前,我有一个片段片段视图
,其中有一个设置按钮
。无论何时按下,它都会显示一个UI元素来定义不同的设置。我复制我拥有的代码:
片段
public static Boolean show = false;
private void initSettingsPanel() {
m_settingsBtn = (ImageButton) m_activity.findViewById(R.id.settingButton);
/* click settings panel button to open or close setting panel. */
m_settingsBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
m_settingsLayout = (LinearLayout) m_activity.findViewById(R.id.settingsPanelLayout);
if (m_settingsLayout.getVisibility() == View.GONE) {
m_settingsLayout.setVisibility(View.VISIBLE);
if (m_settingsPanel == null) {
m_settingsPanel = new SettingsPanel(m_activity, show); //HERE I CALL THE EXTERNAL CLASS
}
} else {
m_settingsLayout.setVisibility(View.GONE);
}
}
});
}
m_settingsPanel.showVar.getShow()
设置spanel
private Activity m_activity;
private static Boolean p_show;
private Switch p_switch;
public SettingsPanel(Activity activity, Boolean show
) {
p_show = show;
m_activity = activity;
initUIElements(); // Init switch
}
private void initUIElements() {
p_switch = (Switch) m_activity.findViewById(R.id.showSwitch);
setUIListeners();
}
private void setUIListeners() {
p_switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
p_show = isChecked;
}
});
}
}
public class SettingsPanel {
public ShowVar showVar = new ShowVar() {
@Override
public void set_Show(Boolean show) {
super.setShow(show);
}
};
}
当前发生的情况是,当我激活开关时,我更改了
Pannel
的th VARIABLE值,但它不会影响片段。为什么?是否有其他方法可以更改其变量的值而不发送到SettingPanel
每个变量?这至少是一种正确的方法吗?最后,我创建了一个抽象类
,以便获取
并设置
变量:
ShowVar
public abstract class ShowVar {
static private Boolean show = false;
public Boolean getShow() {
return show;
}
public void setShow(Boolean value) {
this.show = value;
}
}
从我的SettingPanel
中,我让instanceShowVar
每次设置变量的新值,并更改开关
设置spanel
private Activity m_activity;
private static Boolean p_show;
private Switch p_switch;
public SettingsPanel(Activity activity, Boolean show
) {
p_show = show;
m_activity = activity;
initUIElements(); // Init switch
}
private void initUIElements() {
p_switch = (Switch) m_activity.findViewById(R.id.showSwitch);
setUIListeners();
}
private void setUIListeners() {
p_switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
p_show = isChecked;
}
});
}
}
public class SettingsPanel {
public ShowVar showVar = new ShowVar() {
@Override
public void set_Show(Boolean show) {
super.setShow(show);
}
};
}
从我的片段中,我可以使用变量m_settingsPanel
片段
public static Boolean show = false;
private void initSettingsPanel() {
m_settingsBtn = (ImageButton) m_activity.findViewById(R.id.settingButton);
/* click settings panel button to open or close setting panel. */
m_settingsBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
m_settingsLayout = (LinearLayout) m_activity.findViewById(R.id.settingsPanelLayout);
if (m_settingsLayout.getVisibility() == View.GONE) {
m_settingsLayout.setVisibility(View.VISIBLE);
if (m_settingsPanel == null) {
m_settingsPanel = new SettingsPanel(m_activity, show); //HERE I CALL THE EXTERNAL CLASS
}
} else {
m_settingsLayout.setVisibility(View.GONE);
}
}
});
}
m_settingsPanel.showVar.getShow()
您可以在活动和片段之间注册接口- 在你的活动课上-
public YourActity extends AppCompactActivity implements CallbackInterface {
//your interface instance
private CallbackInterface mCallbackInterface;
@Override
void performSomething() {
// Write your code here.
}
}
}
在片段中,您可以覆盖
奥纳塔克()
注册到接口--
瞧!现在,您可以使用此接口将任何数据发送回您的活动。我认为您需要使用此接口将settingsPanel中的值发送回您的片段。我目前正在将此面板用于其他变量(myVar.method()),它们可以工作。但是,当我试图简单地改变布尔值时,它没有改变。我假设p_show是该变量的一个新实例,因此即使我更改了它的值,原始变量也不会受到影响。我说的对吗?嘿@Mario,你可以在你的活动和片段之间注册一个接口。您可以将任何数据传回活动。不确定,为什么你需要一个抽象类?我最终使用抽象类的原因是因为我的类并不完全是发布的类,而是更复杂的类。此外,我需要相同类型的各种实现共享一个共同的行为,因此需要一个抽象类。