2011-05-16 78 views
0

时,为了保持向后兼容性我创建了一个类来访问操作栏与动作条交互:使用反射

进口android.app.ActionBar; import android.app.ActionBar.Tab; import android.app.ActionBar.TabListener; import android.app.FragmentTransaction;

public class ReflectionBar{ 

    static void getActionBar(Activity a) { 

     ActionBar bar = a.getActionBar(); 

     bar.addTab(bar.newTab().setText("Tab 1").setTabListener(new TabListener() { 

       @Override 
       public void onTabReselected(Tab tab, FragmentTransaction ft) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onTabSelected(Tab tab, FragmentTransaction ft) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
        // TODO Auto-generated method stub 

       } 
      })); 


    bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_USE_LOGO); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    bar.setDisplayShowHomeEnabled(true); 
    // remove the activity title to make space for tabs 
    bar.setDisplayShowTitleEnabled(false); 

    return; 
    } 

} 

我使用调用它在我的活动类:

if (android.os.Build.VERSION.SDK_INT>10){ 
    ReflectionBar bar = new ReflectionBar(); 
    bar.getActionBar(this); 
} 

的问题是,我需要听onTabSelected在我的主要活动的电话,但我不知道如何设置它起来。我已经尝试了几件不成功的事情,非常感谢。

回答

1

问题是我需要在我的主要活动中听取onTabSelected的调用,但我不知道如何设置它。我已经尝试了几件不成功的事情,非常感谢。

定义一个接口。将界面的一个实例作为getActionBar()作为final参数(由于您没有返回操作栏,因此确实应该命名为initActionBar()),但这只是我......)。在TabListener对象的各种onTab...方法中,调用接口上的相应方法。您将无法将ActionBar.Tab对象传递给接口(因为API Level 11+以上),但是在标记和文本属性之间,您应该能够收集一些值得传递的信息,从而将标签指定给该活动。