民间,
我是Android开发的新手,所以我的问题可能非常基础 - 我正在使用actionbarsherlock的标签窗格,并希望为3个标签提供3个不同的UI。但是,我还需要在所有选项卡中共用一个文本框。为了实现第一件事我的想法是有3个不同的活动类扩展ActionBar.TabListener,但是从setTabListener实例化那些类(使用new)是行不通的。任何解决方案?
此致
主要活动类 -
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 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
}
}
它在
给我NullPointer TextView txtView = (TextView) findViewById(R.id.aLog)
所以假设新事物根本不起作用
答案 0 :(得分:1)
你做错了。
TabListener
界面允许您在选择或取消选择选项卡时进行响应。 你如何回应它完全取决于你。如果实现类是Activity
或任何其他特定类,则无关紧要 - 只要它以某种方式实现TabListener
的方法。
您从不必须通过Activity
自行实例化new MyActivity()
课程。 Android需要自己这样做,以便为活动设置环境。因此,如果您想在选择标签时启动其他活动,则应在startActivity
内调用onTabSelected
。但是,在选择选项卡时启动活动可能是一个坏主意。这将打开一个完全独立的活动(在原始选项卡式活动之外),它将没有选项卡式操作栏。
您正在寻找片段:一个活动,其中一个容器包含一个可以与其他片段交换的片段。选择选项卡时,您希望将当前片段替换为特定于该选项卡的另一个片段。这在ActionBarSherlock示例中进行了演示,FragmentTabs.TabManager
处理选项卡和片段之间的绑定。要在代码中使用它,您应该:
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
,给您的用户界面充气并做一些奇特的事情。
另外,请阅读fragments developer guide!