我的全局变量在片段更改后变为空。我遵循了其他帖子的几个步骤,但仍然无法理解。谁能解释并帮助我解决这个问题?
globalclass.java
public class GlobalClass extends Application{
private static String firstName;
private static String middleName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getMiddleName() {
return middleName;
}
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
}
活动java
我使用:
存储:GlobalClass globalVariable = new GlobalClass();
globalVariable.setFirstName(fName.getText().toString());
我还尝试将我的全球班级名称放在我的清单上,但仍然什么也没有发生
<application android:name=".GlobalClass">
这是错误的:
GlobalClass globalVariable = new GlobalClass();
globalVariable.setFirstName(fName.getText().toString());
Android会照顾您在<application android:name=".GlobalClass">
中定义的Application
的一个实例。对您来说,这将是GlobalClass
。
然后,您只需要这样做就可以访问一个共享的Application
:
(GlobalClass)context.getApplication
无论如何,只有在需要访问应用程序生命周期的情况下,才应扩展Application
。在这种情况下,您不应该。您最好创建一个简单的单例:
public class GlobalClass{
private static GlobalClass globalClass;
private GlobalClass() {
}
public static Logger getInstance() {
if (globalClass == null) {
globalClass = new GlobalClass();
}
return globalClass;
}
}
然后,这样使用:
GlobalClass.getInstance();
要以您需要将其放入putextra中的意图发送您的数据,您可以通过fragments执行此操作
从活动中您可以将数据发送到片段
Bundle bundle=new Bundle();
bundle.putString("message", "From Activity");
//set Fragmentclass Arguments
Fragmentclass fragobj=new Fragmentclass();
fragobj.setArguments(bundle);
记住, message
是您的关键,"来自活动"是消息的内容,因此您可以使用fName.getText().toString()
从活动中更改"活动",并且您将在其他片段中获得以下内容。
并将其放入您的片段oncreateview
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String strtext=getArguments().getString("message");
return inflater.inflate(R.layout.fragment, container, false);
}
正常从片段到活动,您应该这样做以获取变量内容
Intent intent = new Intent(getActivity().getBaseContext(),
TargetActivity.class);
intent.putExtra("message", message);
getActivity().startActivity(intent);
并在您的活动中获得此值
Intent intent = getIntent();
String message = intent.getStringExtra("message");
基本上您可以这样做以放置一个值并检索
放置值
Bundle bundle = new Bundle();
bundle.putInt(key, value);
fragment.setArguments(bundle);
用putString
更改putInt
或您想要的任何东西
在您的其他片段中检索它
Bundle bundle = this.getArguments();
if (bundle != null) {
int i = bundle.getInt(key, defaulValue);
}
希望它有帮助!
我遇到了同样的问题,我只是在声明该变量及其解决时声明静态。
public class GlobalVClass extends Application {
//static added here
public static String ReturnValue;
public String getReturnValue() {
return ReturnValue;
}
public void setReturnValue(String returnValue) {
ReturnValue = returnValue;
}
}