我已经阅读了类似的问题,但没有看到这样的问题。我有一个简单的计算器应用程序有两个选项卡。每个人都有自己的活动类。我最初在第一个屏幕上用一个按钮写了这个,onClick将获取输入并将它们传递给结果屏幕,这将进行一些计算,然后显示结果。现在我想用TabHost做到这一点。我设置了两个屏幕,但不知道如何获取输入并将它们传递给结果活动以进行计算并显示结果值。
提前致谢 迪安-O
答案 0 :(得分:4)
最自然的方法是提供自己的android.app.Application子类,并使用它来存储共享数据。然后第一个选项卡将设置数据结构中的值,第二个选项卡将读取它们并使用它们执行您想要执行的任何计算。见这里:How to declare global variables in Android?
假设您不想采用这种方法并且真的想使用Intent附加功能在TabHost中的Activities之间传递数据,您可以执行类似以下hack的操作,使用TabHosts Intent(通过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);
}
}