【问题标题】:android tab pass intent extras to new tabs activityandroid选项卡将意图附加到新选项卡活动
【发布时间】:2010-12-23 23:21:54
【问题描述】:

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

提前致谢 院长-O

【问题讨论】:

  • 我想问一下为什么您对每个标签都使用活动,而不是视图?一般来说,您的代码在视图中会表现得更好。
  • 浏览量是什么意思?我知道显示内容的活动......你是什么意思视图?以及如何在视图之间传递额外内容?

标签: android tabs android-intent extras


【解决方案1】:

最自然的方法是提供您自己的 android.app.Application 子类并使用它来存储共享数据。然后第一个选项卡将设置数据结构中的值,第二个选项卡将读取它们并使用它们执行您想要执行的任何计算。见这里:How to declare global variables in Android?

假设您不想采用这种方法并且真的想使用 Intent extras 在 TabHost 内的活动之间传递数据,您可以在使用 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);
 }
}

【讨论】:

  • 问题,当他们单击第二个选项卡时,您如何设置 onClick ?看来您使用的是按钮而不是选项卡。你写了 Button button = (Button) findViewById(R.id.btn); button.setOnClickListener(new OnClickListener(){
  • 根据您的问题,我认为您想使用按钮启动从选项卡 0 到选项卡 1 的转换。如果没有,那么您可以将状态管理代码放在其他地方。例如,您可以将它放在 Tab1 的 onPause 方法中。只需将所有 onClick 代码移到那里,除了在选项卡之间手动转换的最后两行。您还可以将代码移动到两个 EditText 小部件的 onTextChanged 方法。
猜你喜欢
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多