【问题标题】:Get changed variable form other Class?从另一个类中获取更改的变量?
【发布时间】:2013-08-26 14:30:08
【问题描述】:

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

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

代码如下:

主要活动:

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


}

【问题讨论】:

标签: java android class variables


【解决方案1】:
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");

【讨论】:

    【解决方案2】:

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

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

    • 在以CalledActivity开头的intent中传递标签
    • 使用持久存储将标签值从一个活动传输到另一个活动。

    【讨论】:

      【解决方案3】:

      您不应该在 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-09-25
        • 2013-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多