0

因此,我启动应用程序,并在 MainActivity 的 onCreate 方法中更改变量值。但是当我单击按钮时,我会进入另一个活动,在这个活动中我尝试获取更改后的变量,我只得到变量的原始值。

所以,我的问题是我不知道如何从第一堂课中获取更改后的变量。我怎么做?

这是代码:

主要活动:

package com.example.getandset;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

    //Initialised variable
    String tag;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //The text that I want to show in the next class
        setTag("Show this text");
    }

    public void setTag(String t){
        tag =t;
    }

    public String getTag(){
        return tag;
    }

    public void onClick_Start(View v){
//start of the next Class
        startActivity(new Intent(this, CalledActivity.class));
    }

}

和称为活动:

package com.example.getandset;

import android.os.Bundle;
import android.app.Activity;
import android.widget.TextView;

public class CalledActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_called);

        TextView tv = (TextView)findViewById(R.id.textView);
//trying to get the changed variable
        tv.setText("Got text: "+ new MainActivity().getTag());
    }


}
4

3 回答 3

0
public void onClick_Start(View v){
 //start of the next Inten
   Intent intent = new Intent(this, CalledActivity.class)
   intent.putExta("key",getTag()) ;
   startActivity(intent );
}

将标记文本从 CalledActivity 传递到 onCreate 方法

String value = getIntent().getStringExtra("key");
于 2013-08-26T14:37:48.967 回答
0

您创建一个MainActivitytag初始化为的新实例null。一般来说,你永远不应该Activity像这样实例化一个,总是让系统启动它们,使用startActivity.

有几种方法可以达到你想要的效果:

  • 在开始的意图中传递标签CalledActivity
  • 使用持久存储将标签值从一个活动传输到另一个活动。
于 2013-08-26T14:39:03.270 回答
0

您不应该从 Main 活动中进行此类数据调用。它与对象类不同,因此行为不同。(问题在于您正在调用类,而不是对象的初始化实例)

您需要做的是使用包含数据包的 INTENT 启动活动。

public void sendMessage(View view) {
    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
} 

(这直接来自 android 开发指南)

然后在第二个活动中,您使用

Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

您可以使用任意数量的变量/变量类型来执行此操作。

您的另一个选择是创建一个对象类来“保存”变量。以与上述相同的方式传递该对象,然后使用 .getVariable() 正常调用类中的变量;

于 2013-08-26T14:46:38.363 回答