为了账号安全,请及时绑定邮箱和手机立即绑定

在Android中的选项卡中启动活动

在Android中的选项卡中启动活动

宝慕林4294392 2019-09-20 17:13:56
这是交易。我有一个带有三个标签的应用程序。通过与选项卡中的项目的各种交互,我最终启动了其他活动。客户端已对此进行了审核,并希望在选项卡内“启动”活动,因此选项卡仍然可见,如果用户单击选项卡,则会返回到setContent函数中定义的原始活动。这是可能的,我将如何从其他活动中解决这个问题?(即子活动,而不是定义TabHost并有权调用setContent的那个)?
查看完整描述

3 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

可以在选项卡中启动活动。因此,将tabspec内容设置为ActivityGroup而不是常规Activity。


tabHost.addTab(tabHost.newTabSpec("Tab")

                .setIndicator("Tab")

                .setContent(new Intent(this, YourActivityGROUP.class)

                 .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)));

然后,您可以从该ActivityGroup中启动另一个此类活动,该活动仅更新您所在选项卡的内容视图。


class YourActivityGROUP extends ActivityGroup{


@Override

protected void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);


      //you van get the local activitymanager to start the new activity


      View view = getLocalActivityManager()

                                .startActivity("ReferenceName", new

      Intent(this,YourActivity.class)

                                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))

                                .getDecorView();

       this.setContentView(view);


   }

}


查看完整回答
反对 回复 2019-09-20
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

这是我的解决方案


public class ActivityStack extends ActivityGroup {


  private Stack<String> stack;


  @Override

  public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    if (stack == null) stack = new Stack<String>();

    //start default activity

    push("FirstStackActivity", new Intent(this, FirstStackActivity.class));

  }


  @Override

  public void finishFromChild(Activity child) {

    pop();

  }


  @Override

  public void onBackPressed() {

    pop();

  }



  public void push(String id, Intent intent) {

    Window window = getLocalActivityManager().startActivity(id, intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));

    if (window != null) {

      stack.push(id);

      setContentView(window.getDecorView());

    }

  }


  public void pop() {

    if (stack.size() == 1) finish();

    LocalActivityManager manager = getLocalActivityManager();

    manager.destroyActivity(stack.pop(), true);

    if (stack.size() > 0) {

      Intent lastIntent = manager.getActivity(stack.peek()).getIntent();

      Window newWindow = manager.startActivity(stack.peek(), lastIntent);

      setContentView(newWindow.getDecorView());

    }

  }

}

启动标签


Intent intent = new Intent().setClass(this, ActivityStack.class);

TabHost.TabSpec spec = tabHost.newTabSpec("tabId")

spec.setContent(intent);

拨打下一个活动


public class FirstStackActivity extends Activity {

  @Override

  public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    TextView textView = new TextView(this);

    textView.setText("First Stack Activity ");

    textView.setOnClickListener(new View.OnClickListener() {

      @Override

      public void onClick(View v) {

          Intent intent = new Intent();

          intent.setClass(getParent(), SecondStackActivity .class);

          ActivityStack activityStack = (ActivityStack) getParent();

          activityStack.push("SecondStackActivity", intent);



      }

    });

    setContentView(textView);

  }

}

再次拨打电话


public class SecondStackActivity extends Activity {

  @Override

  public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    TextView textView = new TextView(this);

    textView.setText("First Stack Activity ");

    textView.setOnClickListener(new View.OnClickListener() {

      @Override

      public void onClick(View v) {

          Intent intent = new Intent();

          intent.setClass(getParent(), ThirdStackActivity .class);

          ActivityStack activityStack = (ActivityStack) getParent();

          activityStack.push("ThirdStackActivity", intent);



      }

    });

    setContentView(textView);

  }

}

适用于模拟器2.2


查看完整回答
反对 回复 2019-09-20
  • 3 回答
  • 0 关注
  • 587 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信