Изменить вкладку с помощью onClickItem в ListActivity - PullRequest
1 голос
/ 18 июня 2010

Может кто-нибудь подсказать, пожалуйста, как изменить вкладку, нажав на элемент ВНУТРИ вкладки? Я уже попробовал это с глобальными данными. Код выглядит так:

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 голосов
/ 19 июня 2010

Один из способов сделать это - использовать Intents. И есть много способов использовать Intents для этого. Это особенно хорошо работает в некоторых случаях, например, когда действие отображает некоторый контент от поставщика контента. Я опишу один из возможных методов ниже:

  1. Для Действия, в котором размещены вкладки, дайте ему фильтр намерений, если у него его еще нет. Например, если это действие в стиле «подробности элемента», возможно, его фильтр намерений может соответствовать ACTION_VIEW для определенного типа контента, например vnd.android.cursor.item/vnd.somecontent.
  2. Сделайте так, чтобы действие взяло дополнительное, такое как focus_tab, а в onCreate действия после установки вкладок установите активную вкладку на ту, которая указана этим focus_tab extra.
  3. Переопределите onNewIntent, и в этом методе найдите тот же дополнительный focus_tab и установите активный в значение, указанное этим дополнительным элементом.
  4. Теперь в коде кнопки (т. Е. В кнопке внутри одного из ваших действий с вкладками) создайте Намерение, которое запустит ваше действие Хоста, и добавьте ему focus_tab дополнительно, соответствующее вкладке, на которую вы хотите переключиться. Добавьте флаг FLAG_ACTIVITY_SINGLE_TOP Intent, чтобы не создавать новый экземпляр хоста Activity. А затем позвоните startActivity в том намерении, которое вы только что создали.

Примечание : Я сам не пробовал, но теоретически это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...