【问题标题】:How to call activity for the same tab which is currently active如何为当前处于活动状态的同一选项卡调用活动
【发布时间】:2011-11-29 06:36:20
【问题描述】:

我需要在我的项目中实现选项卡。我有一个布局,其中我有两个选项卡和一个按钮。对于两个选项卡,我有两个活动和调用不同活动的按钮。问题是我在第一个选项卡上显示按钮的结果。即 tab0 在 tab0 事件和按钮单击事件上处于活动状态。并且能够使用tabHost.setOnTabChangedListener 更改选项卡事件,但现在我更想要的是,假设我点击按钮,所以现在按钮视图正在显示,但如果我再次点击 tab0,应该显示 tab0 活动。

我使用了 onClick,但使用后我的 TabChangeListner 不起作用。

你能为我的问题提出解决方案吗?

谢谢。

以下是我运行良好的代码:

public class TabLayoutUsingTabChangeEventActivity extends TabActivity {

        @Override
        public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);                
            final TabHost tabHost = (TabHost)findViewById(android.R.id.tabhost);
            final TabHost.TabSpec sp1 = tabHost.newTabSpec("TAB1");
            TabHost.TabSpec sp2 = tabHost.newTabSpec("TAB2");

            //Creating First Tab
            Intent intent1 = new Intent(this, Tab1Activity.class);
            sp1.setIndicator("TAB1").setContent(intent1);
            tabHost.addTab(sp1);

            //Creating Second Tab 
            Intent intent2 = new Intent(this, Tab2Activity.class);
            sp2.setIndicator("TAB2").setContent(intent2);
            tabHost.addTab(sp2);               

            //Tab Changed Event
            tabHost.setOnTabChangedListener(new OnTabChangeListener(){
                 @Override
                 public void onTabChanged(String tabId) {
                     Log.i("TabId :", tabId);
                     if(tabId.equals("TAB2")){
                     Log.i("TAB1", "TAB1 Changed");
                     Intent intent1 = new Intent().setClass(getApplicationContext(), Tab1Activity.class);
                     sp1.setIndicator("TAB1").setContent(intent1);
                     tabHost.setCurrentTab(0);
                     }
                  }
            });

            Button addNewButton = (Button)findViewById(R.id.add_new_ticket_btn);
            addNewButton.setOnClickListener(new OnClickListener(){
                  @Override
                  public void onClick(View v) {
                     Intent in = new Intent().setClass(getApplicationContext(), AddNewTicketActivity.class);
                     sp1.setContent(in);
                     tabHost.setCurrentTab(0);
                     //startActivity(in);
                 }
            });               
      }
}

【问题讨论】:

    标签: android android-tabhost android-tabactivity


    【解决方案1】:

    您需要使用 AvtivityGroup 在同一选项卡中打开新活动。

    这是完整的例子。

    http://ericharlow.blogspot.com/2010/09/experience-multiple-android-activities.html

    【讨论】:

    • Arslan:不需要ActivityGroup,可以在同一个标​​签页中打开一个新的Activity。如您所见,我可以在 tab0 上同时打开 Tab1Activity 和 AddNewTicketActivity
    • @Romi:这是不好的方法,您最终需要一个 ActivityGroup 来管理 Activity 堆栈。
    • @Adil Soomro:可能是,但请告诉我正在做什么的解决方案。因为我迫切需要它..n 我无法更改整个代码
    猜你喜欢
    • 2017-09-22
    • 2014-05-23
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    相关资源
    最近更新 更多