我有LoginActivity
并且我在此类字符串String currentName
中声明了。我有一个WelcomeActivity
类,我想在TextView中设置这个currentName
。怎么做?现在,我在WelcomeActivity
类中声明了LoginActivity loginActivity
并将其设置为这样,但这不起作用:
TextView welcome;
welcome = (TextView) findViewById (R.id.tvWelcome);
welcome.setText (loginActivity.currentName);
感谢您的帮助;)
答案 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);
我想最好的解决方案是将此字符串存储在database,preferences或至少某些Singletone class的某处。