かなり初心者の質問かもしれませんが、とにかく。Tabhost は廃止されたので、アクション バーのタブに切り替えようとしましたが、フラグメントの使用に問題があります。とにかくアクションバーのタブ内でアクティビティを使用する可能性はありますか?
助けていただければ幸いです。
ありがとう。
かなり初心者の質問かもしれませんが、とにかく。Tabhost は廃止されたので、アクション バーのタブに切り替えようとしましたが、フラグメントの使用に問題があります。とにかくアクションバーのタブ内でアクティビティを使用する可能性はありますか?
助けていただければ幸いです。
ありがとう。
フラグメントよりもアクティビティを使用することに設定している場合は、インテントを使用してアクティビティを起動することができますActionBar.TabListener
startActivity(new Intent(thisActivity(), thatActivity.class));
アクティビティでのフラグメントの使用に関するこのコメントもチェックしてください。
とにかくアクションバーのタブ内でアクティビティを使用する可能性はありますか?
幸いなことに、いいえ。
ただし、フラグメントを使用する必要があるという意味ではありません。UITabListener
の変更に影響を与えることは何でもできます。力ずくの解決策はsetContentView()
、もう一度呼び出して古いウィジェットをすべてダンプし、まったく新しい (おそらく異なる) セットを配置することです。
でを使用することが可能Activity
ですActionBar
。ただし、これは意図された動作ではないことに注意してください。ただし、完全に機能しないという意味ではありません。
import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
//@SuppressLint("NewApi")
public class ActionBarActivity extends Activity {
private String TAG = getClass().getName();
private Intent i = null;
private ActionBar actionBar;
private Tab one;
private Tab two;
private Tab three;
// create a tab listener that is called when the user changes tabs
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
@Override
public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {
if (tab.getTag().equals("one")){
Log.d(TAG, "tab one selected");
i = new Intent(getApplicationContext(), One.class);
determineRun();
}
if (tab.getTag().equals("two")){
Log.d(TAG, "tab two selected");
i = new Intent(getApplicationContext(), Two.class);
determineRun();
}
if (tab.getTag().equals("three")){
Log.d(TAG, "tab three selected");
i = new Intent(getApplicationContext(), Three.class);
determineRun();
}
}
@Override
public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {
// TODO Auto-generated method stub
}
};
// we only need to start the Activity if it's not actually already the current Activity!
void determineRun(){
if (!TAG.equals(i.getComponent().getClassName())){
startActivity(i);
}
return;
}//end method
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setSubtitle(getResources().getString("subtitle"));
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
one = actionBar.newTab();
one.setText("Tab 1").setTag("one");
two = actionBar.newTab();
two.setText("Tab 2").setTag("two");
three = actionBar.newTab();
three.setText("Tab 3").setTag("three");
one.setTabListener(tabListener);
two.setTabListener(tabListener);
three.setTabListener(tabListener);
// You will have to set the selected Tab manually
// A good idea would be to create a subclass for each Tab based on this code
// Then, just create a new Activity which extends ActionBarActivity
actionBar.addTab(one, 0, false);
actionBar.addTab(two, 1, true); // selected Tab
actionBar.addTab(three, 2, false);
}//end method
@Override
public void onResume(){
super.onResume();
Log.d(TAG, "onResume()");
Log.d(TAG, ""+i.getComponent().getClassName());
// again, here you need to select the Tab manually
if (!TAG.equals(i.getComponent().getClassName())){
actionBar.selectTab(two); // selected Tab
}
}//end method
@Override
public void onPause(){
super.onPause();
Log.d(TAG, "onPause()");
}//end method
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
}//end method
}//end class
Activity
タブの変更が見られないように、アニメーションをオーバーライドすることをお勧めします。これを行うには、ActionBarActivityを拡張するのonCreate()
メソッドを変更しますActivity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
overridePendingTransition(0, 0);
}//end method
私の理解が正しければ、フラグメントの代わりにアクションバーを使用してアクティビティを交換したいと考えています。この場合は、読み続けてください。
あなたが見ることができる公式文書から、アクションバー機能は一連のUI、位置を定義します。アクティビティでアクションバーを実装したい場合、最も重要なことは、1.タブ(位置)をアクティビティに関連付けることです。2.タブがクリックされるたびに、tablistenerコールバックを追加します(新しいアクティビティをインスタンス化し、現在のアクティビティを停止します)
最良の設計は、tablistener に個別のクラスを実装して、各アクティビティがこのクラスを使用できるようにすることです。