使用ListActivity中的onClickItem更改选项卡

时间:2010-06-18 07:27:23

标签: android

有人可以通过点击选项卡中的元素来告诉我如何更改标签吗?我已经尝试过使用全局数据。代码如下所示:

public class Tabs extends TabActivity {

int tabNumber = 0;
private TabHost tabHost;
int returnedTabNumber = 0;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    Resources res = getResources(); // Resource object to get Drawables
    tabHost = getTabHost();  // The activity TabHost
    TabHost.TabSpec spec;  // Resusable TabSpec for each tab
    Intent intent;  // Reusable Intent for each tab

    // Create an Intent to launch an Activity for the tab (to be reused)
    intent = new Intent().setClass(this, Tribocracy.class);

    // Initialize a TabSpec for each tab and add it to the TabHost
    spec = tabHost.newTabSpec("map").setIndicator("Map",
                      res.getDrawable(R.drawable.ic_tab_artists))
                  .setContent(intent);
    tabHost.addTab(spec);

    // Do the same for the other tabs
    intent = new Intent().setClass(this, Areas.class);
    spec = tabHost.newTabSpec("areas").setIndicator("Areas",
                      res.getDrawable(R.drawable.ic_tab_albums))
                  .setContent(intent);
    tabHost.addTab(spec);

    // Do the same for the other tabs
    intent = new Intent().setClass(this, Settings.class);
    spec = tabHost.newTabSpec("settings").setIndicator("Settings",
                      res.getDrawable(R.drawable.ic_tab_albums))
                  .setContent(intent);
    tabHost.addTab(spec);

    tabHost.setCurrentTab(tabNumber);


}

protected void onResume() {
    super.onResume();


            GlobalData globalData = ((GlobalData)getApplicationContext());
            returnedTabNumber = globalData.getTabNumber();
            tabHost.setCurrentTab(returnedTabNumber);   


}

}

全局适配器如下所示:

public class GlobalData extends Application {
//----------------------------------------------------
      private int Point1;   //define the vars here
      private int Point2;   //define the vars here
      private int Point3;   //define the vars here
      private int Point4;   //define the vars here
      private int Point5;   //define the vars here
      private int Point6;   //define the vars here
      private int tabNumber;

      public int getTabNumber() //getter of the value
      {     
        return tabNumber;
      }

      public int setTabNumber(int number)     //setter of the value
      {
        tabNumber = number;
        return tabNumber;
      }

}

现在,当我尝试通过单击其中一个项目来更改ListActivity选项卡中的选项卡时,它不会执行任何操作并保留在ListActivity选项卡上。也许我不应该在这里使用onResume()。基本上我想在单击列表中的一个项目时转到第一个选项卡。请帮忙!

1 个答案:

答案 0 :(得分:0)

执行此操作的一种方法是使用Intents。有许多方法可以使用Intents。这在某些情况下尤其有效,例如,活动正在显示来自内容提供商的某些内容。我将在下面描述一种可能的方法:

  1. 对于承载标签的活动,如果它还没有,请为其设置一个意图过滤器。例如,如果它是“项目明细”样式的活动,则其意图过滤器可能与ACTION_VIEW等特定内容类型的vnd.android.cursor.item/vnd.somecontent匹配。
  2. 让活动更多地使用focus_tab,并在活动的onCreate中设置标签后,将活动标签设置为此focus_tab额外指定的标签。
  3. 覆盖onNewIntent,在该方法中,查找相同的focus_tab额外内容,并将有效内容设置为该额外内容指定的内容。
  4. 现在,在您的按钮代码(即其中一个标签内容活动中的按钮)中,创建一个Intent,它将启动您的主机Activity,并为其提供与您要切换的标签相对应的focus_tab个额外内容至。添加FLAG_ACTIVITY_SINGLE_TOP Intent标志,这样就不会创建主机Activity的新实例。然后,在您刚刚创建的Intent上调用startActivity
  5. 注意:我自己没试过,但理论上应该有效。