#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. Хм, в таком случае, вы, вероятно, можете передать ссылку (на родительское действие) на дочернее действие во вкладках, затем, когда вы нажимаете кнопку в дочернем действии, вызываете какой-либо метод для переданного вам родительского действия.