各位,
我是 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)。要在您的代码中使用它,您应该:
- 让您的
MainActivity
扩展SherlockFragmentActivity
。 - 从
fragment_tabs.xml
中获取布局. - 从
FragmentTabs.java
中获取TabManager
类并将其复制到您的代码库(作为单独的类或作为静态内部类,无论有效)。 从
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);
使用
TabManager.addTab
创建您的标签,例如:mTabManager.addTab(mTabHost.newTabSpec("tabA").setIndicator("A"), AFragment.class, null);
为每个选项卡创建
Fragment
类(例如AFragment
)。覆盖Fragment.onCreateView
,扩展您的 UI 并做一些花哨的事情。
此外,请阅读 fragments developer guide !
关于android - 在 actionbarsherlock 中单击选项卡时调用新的 Activity 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18614319/