переключение вкладок программно Android

#android #android-tabhost

#Android #android-tabhost

Вопрос:

У меня есть две вкладки отчеты и диаграммы. На вкладке «Диаграммы» у меня отображается другой «график» активности при нажатии кнопки. Теперь, когда в режиме «график» я нажимаю кнопку, я хочу переключиться на вкладку «Отчеты», а не возвращаться на вкладку «Диаграммы».

Итак, в activity ‘graph’ я подумал, что должен сделать это,

 final TabHost tabHost =  (TabHost) getParent().findViewById(android.R.id.tabHost);
    btnBackToReports.setOnClickListener(new OnClickListener() {  
        public void onClick(View v) {
            tabHost.setCurrentTab(1);
        }
    });
  

Это, вероятно, сработало бы, если бы tabhost создавался в xml класса TabActivity. Но я не создаю tabhost в xml. Итак, я не могу сделать findViewById(android.R.id.tabhost) . Я создаю это в файле Java следующим образом,

 TabHost tabHost = getTabHost();
TabHost.TabSpec chartsSpec = tabHost.newTabSpec("charts").setIndicator("Charts")
                                    .setContent(new Intent(this, Charts.class));
                                    tabHost.addTab(chartsSpec);
  

Итак, как мне теперь получить идентификатор TabHost? Возможно ли программно установить идентификатор для TabHost?

Любая помощь приветствуется.

Комментарии:

1. Спасибо вам, ребята, за ваш ответ. Но я изменил дизайн. Причина, по которой у меня было это действие «graph», заключалась в том, что я не знал, что можно скрыть панель вкладок. Теперь, когда я обнаружил, что могу скрыть панель вкладок, я полностью удалил действие ‘graph’. Теперь я выполняю все действия ‘graph’ на самой вкладке «Диаграммы». Поскольку я могу скрыть панель вкладок, у меня достаточно места на вкладке диаграммы для этого. итак, нажав кнопку «Назад» на вкладке «Диаграммы», которая теперь находится в полноэкранном режиме, я могу переключиться на другую вкладку и заменить панель вкладок.

Ответ №1:

Хм, для этого есть много решений.

Вариант 1) (удалено, было глупо)

Вариант 2) вы могли бы отправить широковещательную передачу из действия, которое хочет изменить вкладку, в действие, в котором размещена вкладка, и в широковещательном приемнике у вас есть доступ к tabhost.

Комментарии:

1. Вариант 1 приведет к утечке памяти, поскольку просмотр и контекст действия все еще будут доступны после уничтожения действия.

2. да, вы правы. вот почему я пометил это как «не очень приятное». Я удалил это, прежде чем кто-то использовал этот неправильный код… :-/

3. Вариант 2 действительно выглядит так, как будто это может быть потенциальным решением этой проблемы.

Ответ №2:

Вы не можете изменить пользовательский интерфейс одного действия на другое (ну, это может быть возможно, но не пытайтесь).

Лучшим вариантом было бы использовать startActivityForResult при запуске вашей графической активности. Затем, когда кто-то нажимает на вашу кнопку, вы можете сделать

 public void onClick(View v) {
    Intent intent = new Intent();
    intent.putExtra("selected_tab", 1);
    setResult(Activity.RESULT_OK);
    finish();
}
  

и в вашей деятельности с вкладками

 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK amp;amp; data != null) {
        int selectedTab = intent.getIntExtra("selected_tab", 0);
        if (selectedTab == 1) {
            tabHost.setCurrentTab(1);
        }
    }
}
  

Комментарии:

1. Я не пытался изменить пользовательский интерфейс. Я только хотел переключиться на другую вкладку вместо родительской вкладки, которая вызвала действие. Ваше предложение действительно кажется очень многообещающим и очень простым в реализации, спасибо.

2. Хм, в таком случае, вы, вероятно, можете передать ссылку (на родительское действие) на дочернее действие во вкладках, затем, когда вы нажимаете кнопку в дочернем действии, вызываете какой-либо метод для переданного вам родительского действия.