从另一个类获取字符串并将其设置为TextView

时间:2017-11-09 12:21:09

标签: java android android-activity

我有LoginActivity并且我在此类字符串String currentName中声明了。我有一个WelcomeActivity类,我想在TextView中设置这个currentName。怎么做?现在,我在WelcomeActivity类中声明了LoginActivity loginActivity并将其设置为这样,但这不起作用:

TextView welcome; welcome = (TextView) findViewById (R.id.tvWelcome); welcome.setText (loginActivity.currentName);

感谢您的帮助;)

8 个答案:

答案 0 :(得分:4)

不是将currentName作为全局变量保存,而是可以通过intent发送数据并将其置于欢迎活动中

在loginActivity中创建意图并发送当前名称。

Intent intent = new Intent(LoginActivity.this, WelcomeActivity.class);
intent.putExtra("currentNameId", currentName);
startActivity(intent);

在欢迎活动的oncreate中获取已发送的数据。

String currentName = getIntent().getStringExtra("currentNameId");

然后将其设置为textview

TextView welcome;
welcome = (TextView) findViewById (R.id.tvWelcome);
welcome.setText(currentName);

答案 1 :(得分:1)

创建一个Singleton类

public class MySingleton {

    private static MySingleton mySingleton;

    private String currentName;

    public static synchronized MySingleton getInstance() {
        if (mySingleton == null)
            mySingleton = new MySingleton();
        return mySingleton;
    }

    public String getCurrentName() {
        return currentName;
    }

    public void setCurrentName(String currentName) {
        this.currentName = currentName;
    }
}

从LoginActivity设置值到Singleton类

MySingleton singleton =  MySingleton.getInstance();
singleton .setCurrentName("<Name to Set>");

从第二个WelcomeActivity访问值

MySingleton singleton =  MySingleton.getInstance();
singleton.getCurrentName();

答案 2 :(得分:0)

在LoginActivity中只需创建静态字符串

   public static String currentName= "test";

在WelcomeActivity中也喜欢这个

   welcome.setText(currentName);

注意 - ,但是使用Intent将一个活动值传递给另一个活动的更好方法。

// LoginActivity

  public void sendDataToNextActivity(View view) {
    Intent intent = new Intent(this, WelcomeActivity.class);
    EditText editText = (EditText) findViewById(R.id.editText);
    String strData= editText.getText().toString();
    intent.putExtra("data", strData);
///OR  intent.putExtra("data", "test");
    startActivity(intent);
}

// WelcomeActivity

在onCreate中接收数据

 Bundle extras = getIntent().getExtras();
        String getDataFromFirstActivity;
        if (extras.containsKey("data") && extras != null) {
                getDataFromFirstActivity= extras.getString("data");
                welcome.setText(getDataFromFirstActivity);
            }

启动意图

https://developer.android.com/training/basics/firstapp/starting-activity.html

https://developer.android.com/reference/android/content/Intent.html

答案 3 :(得分:0)

而不是静态变量, 你可以使用Intent,

Intent intent = new Intent(LoginActivity.this, WelcomeActivity.class);
intent.putExtra("currentNameId", "here add your text which you want to display");
startActivity(intent);

比welcomeActivity, 在onCreate方法中,

String currentName = getIntent().getStringExtra("currentNameId");

现在在textview中设置文字,

welcome.setText(currentName);

答案 4 :(得分:0)

在LoginActivity中存储静态变量并尝试从其他活动访问它是一个好主意。您必须考虑活动生命周期以及活动可能可能被系统破坏的事实,以及它将导致的内存泄漏等。

您可以在此处阅读有关生命周期的更多信息,https://developer.android.com/guide/components/activities/activity-lifecycle.html

您要做的是在意图中将值作为额外值传递,然后从第二个活动中的intent中检索它。

当您的LoginActivity用户输入了正确的凭据并且您即将启动WelcomeActivity时,您想要创建启动第二个活动的意图(将此名称添加为额外的):

Intent welcomeIntent= new Intent(context, WelcomeActivity.class);
intent.putExtra("extra_current_name", currentName);
startActivity(welcomeIntent);

然后在WelcomeActivity onCreate()中使用@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); String currentName = getIntent().getStringExtra("extra_current_name"); TextView welcome = (TextView) findViewById (R.id.tvWelcome); welcome.setText(currentName); } 方法检索该内容。

set SSKey=HKLM\Software\MyProduct\Installed Modules\TestModule
reg.exe add "%SSKey%" /v AppName  /d TestModule /f /reg:32
reg.exe add "%SSKey%" /v Type /t REG_DWORD /d 7 /f /reg:32
reg.exe add "%SSKey%" /v AppName  /d TestModule /f /reg:64
reg.exe add "%SSKey%" /v Type /t REG_DWORD /d 7 /f /reg:64

阅读一些关于在活动和构建意图之间传递数据的信息,https://developer.android.com/training/basics/firstapp/starting-activity.html#BuildIntent

答案 5 :(得分:0)

//To send data to 2nd activity call this function or set it to button onclick.
public void onclick_next(View view) {
        Intent i = new Intent(this,2nd_activity_name.class);
        i.putExtra("username",username); //2nd username has the text that you want to send.
        startActivity(i);
    }

//When you are in second activity,  To get send data from 1st activity, use this codes inside the oncreate method.
Bundle logonData = getIntent().getExtras();
      String username = logonData.getString("username");
      final TextView usernameText = (TextView) findViewById(R.id.textViewUser);
      usernameText.setText(username);

答案 6 :(得分:-1)

我将我的字符串设为public static String currentName及其工作。谢谢你们:))

答案 7 :(得分:-2)

您绝对不应该存储您的活动实例,因为它可以并且将在某些时候由OS重新创建 最简单的解决方案是将currentName声明为静态成员。

public static String currentName;

之后您可以通过classname访问它:

welcome.setText(LoginActivity.currentName);

如果您从LoginActivity打开WelcomeActivity,您还可以使用附加功能。

intent.putExtra(SOME_TAG, currentName);
getIntent().getStringExtra(SOME_TAG);

我想最好的解决方案是将此字符串存储在databasepreferences或至少某些Singletone class的某处。