将字符串从第一个活动传递到最后一个活动,但在开始最后一个活动之前运行另一个活动

时间:2018-09-17 00:33:32

标签: java android android-activity

我是Android的新手,如果重复该问题,请避免并发送链接。 活动A,B和C共有三个。活动A获取一个要在活动C中显示的用户名,但我想先运行活动B,然后再运行活动C。使用意图的问题是我必须运行C第一。如果是单件式,成捆式或可包裹式,您可以提供代码吗?

活动A

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final EditText nameText = findViewById(R.id.nameText);
    nameText.setOnEditorActionListener(new OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            String name = nameText.getText().toString();
            return true;
        }
    });
}

活动B

    public class qPage2 extends AppCompatActivity {

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_q_page2);
                android.os.SystemClock.sleep(500);
            }
        }

活动C

public class lastPage extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_last_page);
    }
}

5 个答案:

答案 0 :(得分:1)

这比您想象的要容易。例如,如果您想通过B从A向C发送Tasif字符串。

活动A

Intent intent = new Intent(A.this, B.class);
intent.putExtra("username", "Tasif");
startActivity(intent);

活动B

Intent intent = new Intent(B.this, C.class);
intent.putExtras(getIntent()); // Add this line, it will copy all data in intent which starts activity B (including `username`).
startActivity(intent);

活动C

String username = getIntent().getStringExtra("username");

答案 1 :(得分:0)

有很多选择:

  1. 您可以使用您提到的意图
  2. 您可以创建一个静态类,并使用字符串类型声明一个静态变量 并在C活动中访问它。

第一个选项的代码: 为意图增值

 Intent n = new Intent(FirstActivity.class,SecondActivity.class);
n.putExtra("name" , name);
n.startActivity();

要检索它:

Intent intent = getIntent();
String name = intent.getStringExtra("name");

2。创建一个静态类成员并访问它

class static StaticClass{
     static name = " ";
 }

在第一个活动中更新此变量,并在最后一个活动中检索它

答案 2 :(得分:0)

将活动“ A”中的String声明为public static,并从活动“ A”中将字符串存储在其中。

例如:活动A.java

 public static String first = "hello";

然后在活动“ C”中将其命名为

活动C.java

String last = A.first; 

答案 3 :(得分:0)

您可以将该字符串存储在SharedPreferences中,并且可以在项目中的任何位置访问该字符串。如果您不熟悉SharedPreferences,请阅读此SharedPrefernces Link

中的文档

答案 4 :(得分:0)

一种简单干净的方法是使用SharedPreferences数据存储选项。它用于保存少量数据,例如键值对。

按以下活动A中的方式将用户名保存在SharedPreferences中:

SharedPreferences sharedPref = getSharedPreferences(
    getString("MyKeyPairFileName"), Context.MODE_PRIVATE);
sharedPref.edit().putString("userKey", "Your username").apply;

从任何活动(B或C或D或... Z)中读取值,如下所示:

SharedPreferences sharedPref = getSharedPreferences(
    getString("MyKeyPairFileName"), Context.MODE_PRIVATE);
String username = sharedPref.getString("userKey", null);
/*null is the default value, if value for the key is not available*/);

在Activity中使用getSharedPreferencesgetPreferences时要小心。您可以阅读有关SharedPreferences here

的更多信息。