全局变量在意图之后总是空的



我的全局变量在片段更改后变为空。我遵循了其他帖子的几个步骤,但仍然无法理解。谁能解释并帮助我解决这个问题?

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

最新更新