2

我已经阅读了类似的问题,但没有看到这样的问题。我有一个简单的计算器应用程序,有两个选项卡。每个人都有自己的活动课。我最初用第一个屏幕上的按钮编写了这个,onClick 将接受输入并将它们传递到结果屏幕,该屏幕将进行一些计算,然后显示结果。现在我想用 TabHost 来做。我已经设置了两个屏幕,但不知道如何获取输入并将它们传递给结果活动以进行计算并显示结果值。

提前感谢院长-O

4

1 回答 1

4

最自然的方法是提供您自己的 android.app.Application 子类并使用它来存储共享数据。然后第一个选项卡将设置数据结构中的值,第二个选项卡将读取它们并使用它们来执行您想要执行的任何计算。请参阅此处:如何在 Android 中声明全局变量?

假设您不想采用这种方法并且真的想使用 Intent extras 在 TabHost 内的活动之间传递数据,您可以在使用 TabHosts Intent 的地方执行类似以下 hack 的操作(通过 getParent().getIntent( )) 来回传递数据。

 public class Tab1 extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.tab_one);
  Button button = (Button) findViewById(R.id.btn);
  button.setOnClickListener(new OnClickListener(){
   @Override
   public void onClick(View v) {
    EditText x = (EditText) findViewById(R.id.x);
    EditText y = (EditText) findViewById(R.id.y);
    int a = Integer.parseInt(x.getText().toString());
    int b = Integer.parseInt(y.getText().toString());
    Intent i = getParent().getIntent();
    i.putExtra("a", a);
    i.putExtra("b", b);
    i.putExtra("tab", 1);
    TabActivity ta = (TabActivity) Tab1.this.getParent();
    ta.getTabHost().setCurrentTab(1);
   }
  });
 }
}


public class Tab2 extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  TextView result = new TextView(this);
  Intent i = getParent().getIntent();
  int a = i.getIntExtra("a", 0);
  int b = i.getIntExtra("b", 0);
  int sum = a + b;
  result.setText(Integer.toString(sum));
        setContentView(result);
 }
}
于 2010-12-24T05:37:38.967 回答