android - 在 actionbarsherlock 中单击选项卡时调用新的 Activity 类

标签 android

各位,

我是 android 开发的新手,所以我的问题可能非常基本 - 我正在使用 actionbarsherlock 的选项卡式 Pane ,并希望为 3 个选项卡提供 3 个不同的 UI。但是,我还需要一个跨所有选项卡的通用文本框。为了实现第一件事,我的想法是让 3 个不同的 Activity 类扩展 ActionBar.TabListener,但是从 setTabListener 实例化这些类(使用新的)是行不通的。有什么解决办法吗?

问候,

主要 Activity 类 -

       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 );

现在是 AActivity 类 -

  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

}
 }

它在

处给我 NullPointer
 TextView txtView = (TextView) findViewById(R.id.aLog)

所以我假设新事物根本不起作用

最佳答案

你做错了。

TabListener 接口(interface)允许您在选择或取消选择选项卡时做出响应。 如何您对此做出回应完全取决于您。实现类是 Activity 还是任何其他特定类并不重要 - 只要它以某种方式实现 TabListener 的方法即可。

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

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

  1. 让您的 MainActivity 扩展 SherlockFragmentActivity
  2. fragment_tabs.xml 中获取布局.
  3. FragmentTabs.java 中获取 TabManager 类并将其复制到您的代码库(作为单独的类或作为静态内部类,无论有效)。
  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 developer guide !

关于android - 在 actionbarsherlock 中单击选项卡时调用新的 Activity 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18614319/

相关文章:

android - Nexus 9 模拟器未在 AVD 中显示

java - 类型 'return length as Int.toString'的表达式 'Nothing'不能作为函数调用

android - 如何从Bundle中提取HashMap而不进行强制转换?

android - 无法使用 mavenCentral 解析 gradle 中的库

android - 当创建它的参数发生变化时,如何替换 Android Jetpack Compose AndroidView?

android - 是否可以使用不同的程序包名称发布同一应用程序?

android - 从自定义 ListAdapter 创建和显示 AlertDialog

java - 以编程方式重新安装应用程序 apk 而无需下载

android - 播放 Sdcard 中的音频文件

android - 使用 IMAGE_CAPTURE Intent 时如何提高相机分辨率