【问题标题】:Passing textview value across activities跨活动传递 textview 值
【发布时间】:2017-07-20 19:48:07
【问题描述】:

我试图将一个值传递给一个文本视图到另一个活动,但只有当活动中的按钮被点击时。

这是我尝试设置文本的活动...

public static Button yes;
public static final String TEST_KEY = "test";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_question19);

    yes = (Button) findViewById(R.id.finalYes);
    yes.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v){
            Intent myIntent = new Intent(v.getContext(), Question13Activity.class);
            startActivity(myIntent);

            Intent i = new Intent(Question12Activity.this, HighRiskActivity.class);
            i.putExtra(TEST_KEY, "SOME STRINGSSS");

        }
    });

这里是作为更新文本视图值的目的地的 HighRiskActivity...

TextView t;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.high_risk);
        t = (TextView) findViewById(R.id.abusedOrNah);

        Bundle extras = getIntent().getExtras();
        if(extras != null)
        {
            String value = extras.getString(TEST_KEY);
            t.setText(value);
        }

我的问题是在所需的活动中没有打印任何文本,我是否传递了错误的数据?任何帮助都会很棒,这是我正在创建的应用程序的最后一步:D

更新

我不希望在单击按钮时将 Question12Activity 定向到 HighRiskActivity。我希望它进入下一个活动,但单击按钮后仍然能够将文本传递到 HighRiskActivity。很抱歉造成混乱,希望这更有意义:)

【问题讨论】:

  • 欢迎来到 SO! (1) 这是作业吗?如果是这样,它应该被标记为这样。 (2) 第二个代码示例属于什么活动:Question13Activity 或 HighRiskActivity?它似乎是 HighRiskActivity,但您没有启动 HighRiskActivity。
  • 是的,我们对您想要在哪个活动上设置文本的代码感到困惑?
  • 这不是作业,它是我为某人制作的应用程序...第二个代码示例表示 HighRiskActivity,我希望在其中设置 TextView 的值
  • 你没有那个 startActivity..
  • 一次只有一个活动处于活动状态。连续两次调用 startActivity 没有任何好处

标签: java android


【解决方案1】:

尝试以这种方式传递数据:

Intent i = new Intent(this, SecondActivity.class);

Bundle bundle = new Bundle();

//Add your data to bundle
bundle.putString(“test”, "Data you want to pass");

//Add the bundle to the intent
i.putExtras(bundle);

startActivity(i);

现在在您的 SecondActivity 类中,您检索数据如下:

Bundle bundle = getIntent().getExtras();

//get the data…
String stuff = bundle.getString(“test”); 

【讨论】:

  • 你为什么要开始两个活动??
【解决方案2】:

我不知道您通过以下语句开始第一个活动究竟想达到什么目的

Intent myIntent = new Intent(v.getContext(), Question13Activity.class); startActivity(myIntent);

但是,如果您要启动的活动是 HighRiskActivity,那么以下内容应该可以解决您的问题:

  1. 去掉上面提到的与 Question13Activity 相关的语句。
  2. 并添加调用以启动实际的 HighRiskActivity,如下所示:

Intent i = new Intent(Question12Activity.this, HighRiskActivity.class); i.putExtra(TEST_KEY, "SOME STRINGSSS"); startActivity(i); //这一行对于启动新 Activity 很重要。

所以,我猜你的主要问题是你没有通过startActivity(i); 调用开始活动。

【讨论】:

  • 我希望能够继续完成我的问题活动,但仍然能够生成文本并将其存储在 HighRiskActivity 中。
  • 我还没有这样做,上面有人给出的解决方案启动了 HighRiskActivity,这不是我想要的,即使它给了我文本,也没有继续提出问题跨度>
  • @AaronAllen:那么您可能需要编辑您的问题以解释您不想启动 HighRiskActivity,因为这会让每个人都感到困惑。您为 HighRiskActivity 创建了一个意图,该意图仅用于启动 HighRiskActivity。说明你想在 HighRiskActivity 中运行一些代码而不启动它。
  • @LarsH 谢谢我更新了我的问题,澄清了情况
【解决方案3】:

在活动 A 中,您使用的内部意图包对您不公开,对意图来说是私有的。在活动 B 中,您要求意图改为查找您自己提供的捆绑包。

在你的 Activity A 中尝试这样的事情

    Intent intent = new Intent(context, YourActivity.class);
    Bundle bundle = new Bundle();
    bundle.putParcelable("EXTRA1", "string data");
    intent.putExtra(TEST_KEY, bundle);
    startIntent(intent);

这是一个关于这个主题的好文章(见答案)Advantages of using Bundle instead of direct Intent putExtra() in Android

【讨论】:

    【解决方案4】:

    您不需要为了连接两个活动而定义两个意图。将以下内容放在 onClick 方法中

    Intent i = new Intent(Question12Activity.this, HighRiskActivity.class);
    i.putExtra(TEST_KEY, "SOME STRINGSSS");
    startActivity(i);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      相关资源
      最近更新 更多