8

かなり初心者の質問かもしれませんが、とにかく。Tabhost は廃止されたので、アクション バーのタブに切り替えようとしましたが、フラグメントの使用に問題があります。とにかくアクションバーのタブ内でアクティビティを使用する可能性はありますか?

助けていただければ幸いです。

ありがとう。

4

4 に答える 4

3

フラグメントよりもアクティビティを使用することに設定している場合は、インテントを使用してアクティビティを起動することができますActionBar.TabListener

startActivity(new Intent(thisActivity(), thatActivity.class)); 

アクティビティでのフラグメントの使用に関するこのコメントもチェックしてください。

于 2012-06-14T12:38:47.450 に答える
2

とにかくアクションバーのタブ内でアクティビティを使用する可能性はありますか?

幸いなことに、いいえ。

ただし、フラグメントを使用する必要があるという意味ではありません。UITabListenerの変更に影響を与えることは何でもできます。力ずくの解決策はsetContentView()、もう一度呼び出して古いウィジェットをすべてダンプし、まったく新しい (おそらく異なる) セットを配置することです。

于 2012-06-14T13:04:05.457 に答える
0

でを使用することが可能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
于 2012-12-31T08:42:40.963 に答える
0

私の理解が正しければ、フラグメントの代わりにアクションバーを使用してアクティビティを交換したいと考えています。この場合は、読み続けてください。

あなたが見ることができる公式文書から、アクションバー機能は一連のUI、位置を定義します。アクティビティでアクションバーを実装したい場合、最も重要なことは、1.タブ(位置)をアクティビティに関連付けることです。2.タブがクリックされるたびに、tablistenerコールバックを追加します(新しいアクティビティをインスタンス化し、現在のアクティビティを停止します)

最良の設計は、tablistener に個別のクラスを実装して、各アクティビティがこのクラスを使用できるようにすることです。

于 2013-03-11T21:35:44.130 に答える