8

这可能是一个相当新手的问题,但无论如何。由于 Tabhost 已贬值,我尝试切换到操作栏选项卡,但我在使用片段时遇到了问题。是否有可能在操作栏选项卡中使用活动?

我将不胜感激任何帮助。

谢谢。

4

4 回答 4

3

如果您打算使用活动而不是片段,则可以使用意图从您的ActionBar.TabListener

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

您还应该查看有关使用Fragments over Activities 的评论

于 2012-06-14T12:38:47.450 回答
2

是否有可能在操作栏选项卡中使用活动?

幸运的是,没有。

但这并不意味着您必须使用片段。你TabListener可以做任何事情来影响你的用户界面的变化。一个蛮力的解决方案是setContentView()再次调用,转储所有旧的小部件并放置一个全新的(可能不同的)集合。

于 2012-06-14T13:04:05.457 回答
0

如果我的理解是正确的,您想使用操作栏来交换活动而不是片段。在这种情况下,请继续阅读。

从官方文档可以看到,actionbar特性定义了一组ui,position。如果您想用活动实现操作栏,最重要的是 1. 将您的选项卡(位置)与您的活动相关联。2.添加tablistener回调(实例化你的新活动,停止当前活动)每次点击选项卡

最好的设计是让 tablistener 实现一个单独的类,这样你的每个活动都可以使用这个类。

于 2013-03-11T21:35:44.130 回答
0

可以将 anActivityActionBar. 请注意,这不是预期的行为,但这并不意味着它不能完美地工作。

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 回答