【问题标题】:how to pass values from different activities to another activity如何将不同活动的值传递给另一个活动
【发布时间】:2015-03-21 20:49:11
【问题描述】:

我正在编写我的第一个 Android 应用程序。

我想在活动A中输入3个整数,在活动B和C中做同样的事情。然后我想用所有9个整数计算一些东西并在活动D中显示结果。

如何将前 3 个活动的整数放入最后一个活动?

编辑: 我已经尝试了两个 Activity..MainActivity 输入中的整数,输出在 Activity 2 中的 TextView 中打印...但是 Activity 2 中的答案始终为零。

代码是:-

公共类 MainActivity 扩展 ActionBarActivity {

int int1;

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

    Button b = (Button) findViewById(R.id.bt1);
    EditText et = (EditText) findViewById(R.id.edT1);
    try{
    int1 = Integer.parseInt(et.getText().toString());
    } catch (NumberFormatException e)
    {
        e.printStackTrace();
    }
    b.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent i = new Intent(MainActivity.this,Activity2.class);
            i.putExtra("val1",int1);
            startActivity(i);

        }
    });
}

}

对于活动 2 是:-

public class Activity2 extends Activity {

int value;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity2xml);
    TextView t2 = (TextView) findViewById(R.id.tt2);
    Intent intent = getIntent();
    int a = intent.getIntExtra("val1",0);
    t2.setText("Bingo "+String.valueOf(a));

}

}

【问题讨论】:

  • 欢迎来到 Stack Overflow!我用更平易近人的英语改写了你的问题,所以会有更多的人阅读它。如果您已经尝试过某些东西,请发布您之前尝试的代码并解释什么不起作用。祝你好运!

标签: android android-activity


【解决方案1】:

您必须将 Intent 中的值从一个活动传递到另一个活动,直到活动 D。

class ActivityA extends Activity {
   ...
   private void startActivityB(){
      Intent i = new Intent(this, ActivityB.class);
      i.putExtra("val1", 1);
      i.putExtra("val2", 1);
      i.putExtra("val3", 1);
      startActivity(i);
   }
}

ActivityB 中,您必须读取从ActivityA 传递的值,并将这些值与新值一起传递给ActivityC

class ActivityB extends Activity {
   ...
   private void startActivityC(){

      int val1 = getIntent().getIntExtra("val1", 0);
      int val2 = getIntent().getIntExtra("val2", 0);
      int val3 = getIntent().getIntExtra("val3", 0);

      Intent i = new Intent(this, ActivityC.class);
      i.putExtra("val1", val1);
      i.putExtra("val2", val2);
      i.putExtra("val3", val3);

      i.putExtra("val4", 5);
      i.putExtra("val5", 6);
      i.putExtra("val6", 7);

      startActivity(i);
   }
}

ActivityC 执行相同操作,并在ActivityD 中读取值。我希望你能明白。

顺便说一句。如果您知道 Activity D 应该显示总和,则优化是将总和从 Activity 传递给 Activity 而不是单个值。

【讨论】:

  • 在活动 A 中,整数的值是由 ExitText 从用户那里获取的......所以在 i.putExtra("val1", 1);我应该在这里写什么而不是 1....感谢您的回复..:)
  • 我已经编辑了问题...@sockeqwe 请看一下....然后回答即 Activity2 中的整数值始终打印为 0
  • @HimanshuMalhotra 有两种方法,你把两种方法都搞混了。 intent.putExtra("val1", int) 必须与 intent.getIntExtra("val1") 一起阅读。还有第二种方法可以将数据放入 Bundle 的 Intent 中:Bundle b = new Bundle(); b.putInt("val1", int); intent.putExtra(b); 然后你必须使用 intent.getExtra().getInt("val1"); 请参阅 stackoverflow.com/questions/15243798/…
  • 在第一种方法中,我在 intent.getIntExtra("val1") 中遇到错误 ....即 Intent 类型中的方法 getIntExtra(String, int) 不适用于参数(字符串)
  • 来吧,阅读编译器错误消息并查看 java 文档。需要第二个参数,如果意图不包含键为“val1”的数据,则返回默认值。所以你的电话应该是intent.getIntExtra("val1", 0); developer.android.com/reference/android/content/…,int)顺便说一句。你应该接受正确的答案
【解决方案2】:

您可以使用putExtra 方法发送原始数据类型。像这样简单地使用它。

//in activity A 
Intent myIntent = new Intent(this,ActivityB.class);
myIntent.putExtra("int1", 3);
myIntent.putExtra("int2", 5);
startActivity(myIntent);

//可以在Activty B中获取这个值

Bundle extras = getIntent().getExtras();
int int1= extras.getInt("int1");
int int2 = extras.getInt("int2");

你可以这样继续 ActivityB 到 AcitivtyC 和 ActivityC 到 ActivityD。

【讨论】:

    【解决方案3】:

    将您在活动 A、B、C 中输入的值存储在 SharedPreference 对象中。 在 Activity D 中检索该对象的所有值。

    关于如何使用 sharedpreferences 的参考可以在 - http://developer.android.com/training/basics/data-storage/shared-preferences.html 找到

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      相关资源
      最近更新 更多