java - 在活动之间传递值
问题描述
我应该TextView
在MainActivity
"stringadaA" 和 "numerodaB" 中显示 2,即放入 2 个活动 A 和 B 中的字符串和数字。这些值不能在活动之间的转换中丢失,但只有在被用户。我设法做到了,但是当我按下“Ritorna”按钮返回到MainActivity
它时,它并没有像我预期的那样保持两个结果,如果我在ActivityA
and中插入值,为什么不保存两者ActivityB
?
提前致谢
public class MainActivity extends Activity {
TextView stringaA;
TextView numeroB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
stringaA = findViewById(R.id.stringadaA);
numeroB= findViewById(R.id.numerodaB);
Button btnA = findViewById(R.id.btnactivitya);
Button btnB= findViewById(R.id.btnactivityb);
final EditText editText= findViewById(R.id.editactivitya);
btnA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(), ActivityA.class);
startActivity(i);
}
});
Bundle extras= getIntent().getExtras();
if (extras!=null){
String value = extras.getString("stringaA");
String number =extras.getString("numero");
stringaA.setText(value);
numeroB.setText(number);
}
btnB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(), ActivityB.class);
startActivity(i);
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
String stringa= stringaA.getText().toString();
outState.putString("STRINGA", stringa);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
String stringa= savedInstanceState.getString("STRINGA");
}
}
public class ActivityA extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
final EditText edtA= findViewById(R.id.editactivitya);
Button returnbtnA= findViewById(R.id.ritornaallaprincipaleA);
returnbtnA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(), MainActivity.class);
i.putExtra("stringaA", edtA.getText().toString());
startActivity(i);
}
});
}
}
public class ActivityB extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
final EditText edtb= findViewById(R.id.editactivityb);
Button returnbtnb= findViewById(R.id.ritornaallaprincipaleB);
returnbtnb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(), MainActivity.class);
i.putExtra("numero", edtb.getText().toString());
startActivity(i);
}
});
}
}
XML 代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/testo1"
android:textSize="30dp"
android:layout_marginTop="30dp"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Main Activity"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btnactivitya"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:textSize="20dp"
android:text="Activity A"
android:layout_below="@+id/testo1"
android:layout_centerHorizontal="true"
/>
<Button
android:id="@+id/btnactivityb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:textSize="20dp"
android:text="Activity B"
android:layout_below="@+id/btnactivitya"
android:layout_centerHorizontal="true"/>
<TextView
android:id="@+id/stringaA"
android:layout_below="@id/btnactivityb"
android:layout_width="wrap_content"
android:layout_marginTop="30dp"
android:layout_centerHorizontal="true"
android:layout_height="wrap_content"
android:text="Stringa da Activity A:"/>
<TextView
android:id="@+id/stringadaA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/stringaA"
android:layout_centerHorizontal="true"
android:textSize="20dp"
android:layout_marginTop="30dp"/>
<TextView
android:id="@+id/stringaB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Numero da Activity B"
android:layout_marginTop="20dp"
android:layout_below="@+id/stringadaA"
android:layout_centerHorizontal="true"/>
<TextView
android:id="@+id/numerodaB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/stringaB"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:textSize="20dp"
/>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/ActivityA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="40dp"
android:text="Activity A"/>
<TextView
android:id="@+id/InserisciA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="90dp"
android:layout_centerInParent="true"
android:textSize="20dp"
android:layout_below="@+id/ActivityA"
android:text="Inserisci stringa"/>
<EditText
android:id="@+id/editactivitya"
android:layout_marginTop="20dp"
android:layout_below="@+id/InserisciA"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:width="100dp"
android:layout_height="wrap_content" />
<Button
android:id="@+id/ritornaallaprincipaleA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editactivitya"
android:layout_alignStart="@+id/InserisciA"
android:layout_marginStart="3dp"
android:layout_marginTop="25dp"
android:text="Ritorna"
android:textSize="20dp" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/ActivityB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30dp"
android:layout_centerHorizontal="true"
android:layout_marginTop="40dp"
android:text="Activity B"/>
<TextView
android:id="@+id/InserisciB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:layout_centerHorizontal="true"
android:layout_centerInParent="true"
android:layout_below="@+id/ActivityA"
android:text="Inserisci numero"/>
<EditText
android:id="@+id/editactivityb"
android:layout_below="@+id/InserisciB"
android:layout_centerHorizontal="true"
android:width="100dp"
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/ritornaallaprincipaleB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ritorna"
android:textSize="20dp"
android:layout_marginTop="40dp"
android:layout_centerHorizontal="true"
android:layout_below="@+id/editactivityb"/>
</RelativeLayout>
解决方案
使用 startActivityForResult 方法调用 ActivityA 和 ActivityB。并覆盖 MainActivity 中的 onActivityResult 方法。
- 这里, 100 是 ActivityA 的 int 值请求代码:
Intent i = new Intent(MainActivity.this, ActivityA.class);
startActivityForResult(i,100);
- 这里:这里,101 是 ActivityB 的 int 值请求代码:
Intent i = new Intent(MainActivity.this, ActivityB.class);
startActivityForResult(i,101);
- 在 ActivityA 中,这里的结果代码是
RESULT_OK
Intent i = new Intent();
i.putExtra("stringaA", edtA.getText().toString());
setResult(RESULT_OK,i);
finish();
- 在ActivityB中,这里的结果代码是
RESULT_OK
Intent i = new Intent();
i.putExtra("numero", edtb.getText().toString());
setResult(RESULT_OK,i);
finish();
- 覆盖 MainActity 类中的 onActivityResult(int requestCode,int resultCode,Intent data) 方法
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent
data {
super.onActivityResult(requestCode, resultCode, data);
switch(requestCode){
case 100:
stringaA.setText(data.getStringExtra("stringaA"));
break;
case 101:
numeroB.setText(data.getStringExtra("numero"));
break;
}
}
推荐阅读
- python - 计算列表中可能的相同字母配对数
- arrays - 从 API 到值数组的 Angular JSON
- sql-server - 迁移到 LINQ To SQL 或实体框架
- javascript - 在 react-native-webrtc 中连接的对等点之间的正在进行的音频流中添加视频流
- android - 错误:包路径无效。有效的系统映像路径是:ository
- react-native - 在 IOS 模拟器中将可见设置为 false 时 React Native 模态闪烁?
- r - 将带有回归结果的数据帧的协变量输入 Stargazer
- php - 防止添加重复数组
- macos - 在 Big Sur 上使用 nix 构建 PostgreSQL 12 时出错:“stdio.h not found”
- db2 - DB2 将备份附加到一个唯一的数据库中