【问题标题】:How to send Text View data from 1st activity to 3rd activity如何将文本视图数据从第一个活动发送到第三个活动
【发布时间】:2019-03-30 15:15:38
【问题描述】:

我正在开发一个有 3 项活动的项目。每个活动都有自己的按钮,单击该按钮会启动下一个活动。第一个活动有一个显示随机字符串的文本视图。当我在第一个活动中按下按钮时,第二个活动将开始。当我在第二个活动中按下按钮时,第三个活动开始了。但我想知道如何将随机字符串从第一个活动发送到第三个活动。

第一个活动:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.util.Random;

public class SelectRandomNumber extends AppCompatActivity {


    private Button generateStringBtn;
    private TextView randomOne;
    private TextView randomTwo;
    private TextView randomThree;


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

        generateStringBtn = (Button) findViewById(R.id.generateRandomBtn);
        randomOne = (TextView) findViewById(R.id.randomStringOne);
        randomTwo = (TextView) findViewById(R.id.randomStringTwo);
        randomThree = (TextView) findViewById(R.id.randomStringThree);

        generateStringBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                randomOne.setText(randomString(173));
                randomTwo.setText(randomString(173));
                randomThree.setText(randomString(173));

            }
        });

        randomOne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                sendID_one();
            }
        });



    }

    public String randomString(int length){
        char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".toCharArray();
        StringBuilder stringBuilder = new StringBuilder();
        Random random = new Random();
        for(int i = 0; i < length; i++){
            char c = chars[random.nextInt(chars.length)];
            stringBuilder.append(c);
        }
        return stringBuilder.toString();
    }

    public void sendID_one(){
        String message = randomOne.getText().toString();
        Intent check = new Intent(SelectRandomNumber.this, CheckCandidateID.class);
        check.putExtra("Extra_Message",message);
        startActivity(check);

    }
    public void sendID_Two(){
        String message = randomTwo.getText().toString();
        Intent check = new Intent(SelectRandomNumber.this, CheckCandidateID.class);
        check.putExtra("Extra_Message",message);
        startActivity(check);

    }
    public void sendID_Three(){
        String message = randomThree.getText().toString();
        Intent check = new Intent(SelectRandomNumber.this, CheckCandidateID.class);
        check.putExtra("Extra_Message",message);
        startActivity(check);
    }

    public void send(){
        Intent check = new Intent(SelectRandomNumber.this, Try.class);  //for sending data to third activity
        check.putExtra("Extra_Message_Send",randomOne.getText().toString());
        startActivity(check);
    }

}

第三个活动:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class Try extends AppCompatActivity {

    private TextView tv;

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

        tv = (TextView) findViewById(R.id.test);

        String s = getIntent().getStringExtra("Extra_Message_Send");
        tv.setText(s);



    }
}

【问题讨论】:

  • 使用intent ..
  • @JohnJoe 那么第一个活动应该有 2 个 Intent 吗?一个用于第二个活动,另一个用于第三个活动?
  • 你也可以使用 sharedPreferences
  • 不要使用 SharedPreferences 在活动之间进行通信,除非它实际上是,呃,偏好是要在键值存储中持久保存到磁盘。像用户选择的过滤器类别 ID 等。

标签: java android android-activity


【解决方案1】:

如果你想从第二个活动开始第三个活动,你必须在第二个活动然后第三个活动中发送你的字符串。最好在第二个和第三个活动中发送所有三个字符串,这样你就可以来回:

String message1 = randomOne.getText().toString();
String message2 = randomTwo.getText().toString();
String message3 = randomThree.getText().toString();

check.putExtra("Extra_Message1",message1);
check.putExtra("Extra_Message2",message2);
check.putExtra("Extra_Message3",message3);

然后您还必须将这些数据从第二个活动传递到第三个活动。

【讨论】:

    【解决方案2】:

    使用意图在活动之间传递数据。在您的第一个活动中,

    Intent mIntent = new Intent(FirstActivity.this, ThirdActivity.class);
    mIntent.putExtra("randomString", tv.getText().toString());
    

    在第三个活动中,

    String s= getIntent().getStringExtra("randomString");
    

    【讨论】:

    • 值得注意的是,在ThirdActivity 中定义public static Intent createIntent(Context context, String randomString) { 方法是常见的模式,这样您就不需要将"randomString" 暴露为跨多个文件的硬编码字符串。
    • 不工作!我已经更新了我的代码。请你看一遍好吗?
    • 问题出在方法 send() 中,您正在做的是将数据从第一个活动传递到第三个活动,然后启动第三个活动,这实际上应该从第二个活动开始。此处传递意图的不恰当方式是 FirstActivity(发送 edittext 值)->SecondActivity(将 send() 放在这里)->ThirdActivity 您可以使用单例类来持久化数据。
    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多