java - 在 Activity 之间传递值

标签 java android

我应该显示 2 TextViewMainActivity "stringadaA"和 "numerodaB",即放入 2 个 Activity A 和 B 中的字符串和数字。这些值在 Activity 之间的转换中不得丢失,但只有在用户更改时才必须更改。我设法做到了,但是当我按下“Ritorna”按钮返回到 MainActivity 时它没有像我期望的那样保留两个结果,如果我在 ActivityA 中插入值,为什么不会同时保存两个结果?和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 方法。

  1. 这里,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;  
        }
    }
    

    关于java - 在 Activity 之间传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59707434/

    相关文章:

    android - FragmentManager findFragmentById 返回 null

    android - Android APK 签名存在哪些陷阱?

    java - 在 IntelliJ 中编辑运行时类路径以包含 src/main/config

    java - Android:通过索引获取arrayList元素

    android - 在 Android 中将短信设置为已读

    java - Android:巨型模式与 Multidex

    java - 来自 byte[] 的 BitSet 长度奇怪

    java - 在 Java 静态方法声明中使用当前类

    java.net.SocketException : Software caused connection abort: recv failed; Causes and cures? 异常

    android - 将 RxJava 与 Room 一起使用时循环