私のプロジェクトには、2 つのタブと 1 つのボタンがあります。2 つのタブには、2 つのアクティビティと、異なるアクティビティを呼び出すボタンがあります。問題は、最初のタブにボタンの結果を表示していることです。つまり、tab0 は、tab0Event とボタン クリック イベントでもアクティブです。そして、tabHost.setOnTabChangedListenerを使用してタブイベントを変更することができますが、さらに欲しいのは、ボタンをクリックするとボタンビューが表示されているとします(tab0がアクティブです)が、もう一度tab0をクリックすると、tab0アクティビティが表示されるはずです表示されます。
タブをクリックするための多くのソリューションを試しました.1つは
getTabWidget().getChildAt(getTabHost().getCurrentTab()).setOnClickListener
(new View.OnClickListener() {
@Override public void onClick(View v) {
System.out.println(getTabHost().getCurrentTab());
} });
しかし、このコードを tabChnageListner で使用すると、タブの変更が機能せず、非常に予期しない結果が得られました。私の問題の解決策を提案してください。
ありがとう。
タブの変更で機能するコードは次のとおりです: (タブの変更で正常に機能し、Tab Onclick を追加する必要があります)
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);
}
});
}
}