2

Folks,

I am new to android development so my question is probably very basic - I am using the tabbed pane from actionbarsherlock and want to have 3 different UI for 3 tabs. However I also need one textbox in common across all tabs. To achieve the first thing my idea was to have 3 different activity classes extending the ActionBar.TabListener but instantiating those classes (using new) from the setTabListener is not working. Any solution?

Regards,

The Main Activity Class -

       ActionBar.Tab aTab = getSupportActionBar().newTab();
    aTab.setText("A");
    aTab.setTabListener(new AActivity());
    getSupportActionBar().addTab(aTab);

    ActionBar.Tab bTab = getSupportActionBar().newTab();
    bTab.setText("B");
    bTab.setTabListener(new MessageActivity());
    getSupportActionBar().addTab(bTab);

    ActionBar.Tab cTab = getSupportActionBar().newTab();
    cTab .setText("C");
    cTab .setTabListener(new DataActivity());
    getSupportActionBar().addTab(cTab );

Now the AActivity Class -

  public class AActivity extends Activity implements ActionBar.TabListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_call);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.call, menu);
    return true;
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    System.out.println("In A");
    TextView txtView = (TextView) findViewById(R.id.aLog);

}

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

}

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

}
 }

It is giving me NullPointer at

 TextView txtView = (TextView) findViewById(R.id.aLog)

so am assuming the new thing is not working at all

4

1 回答 1

1

你这样做是错的。

TabListener界面允许您在选择或取消选择选项卡时做出响应。你如何回应它完全取决于你。实现类是一个Activity还是任何其他特定类都没有关系——只要它TabListener以某种方式实现了方法。

永远不必Activity通过自己实例化一个类new MyActivity()。Android 需要自己做这件事,以便为 Activity 设置环境。因此,如果您想在选择选项卡时启动另一个活动,那么您应该调用startActivityinside onTabSelected。但是,在选择选项卡时启动活动可能不是一个好主意。这将打开一个完全独立的活动(在您原来的选项卡式活动之外),并且它不会有选项卡式操作栏。

您正在寻找片段:一个带有容器的单个活动,其中包含一个片段,您可以与其他片段交换。选择选项卡时,您希望将当前片段替换为特定于该选项卡的另一个片段。这在 ActionBarSherlock 示例中进行了演示,FragmentTabs.TabManager处理选项卡和片段之间的绑定。要在您的代码中使用它,您应该:

  1. 做你的MainActivity扩展SherlockFragmentActivity
  2. 从 中获取布局fragment_tabs.xml
  3. 从中获取TabManagerFragmentTabs.java并将其复制到您的代码库(作为单独的类或作为静态内部类,无论是否有效)。
  4. 从以下位置复制设置代码FragmentTabs.onCreate

    super.onCreate(savedInstanceState);
    
    setContentView(R.layout.fragment_tabs);
    mTabHost = (TabHost)findViewById(android.R.id.tabhost);
    mTabHost.setup();
    
    mTabManager = new TabManager(this, mTabHost, R.id.realtabcontent);
    
  5. 使用 创建标签TabManager.addTab,例如:

    mTabManager.addTab(mTabHost.newTabSpec("tabA").setIndicator("A"),
            AFragment.class, null);
    
  6. 为每个选项卡创建类(Fragment例如AFragment)。覆盖Fragment.onCreateView,膨胀你的 UI 并做一些花哨的事情。

另外,请阅读Fragments 开发者指南

于 2013-09-04T13:16:21.723 回答