【发布时间】:2015-10-24 13:14:06
【问题描述】:
我正在关注this 视频来创建带有导航抽屉和视图寻呼机的标签主机,我的页面可以正常滑动,但添加标签主机后,如果我运行我的应用程序它会崩溃,并在此行附近给出空指针异常
tabhost.addTab(tabSpac);
MainActivity.java
public class MainActivity extends ActionBarActivity implements OnPageChangeListener,OnTabChangeListener{
ViewPager viewpager;
TabHost tabhost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViewpager();
initTabhost();
}
private void initTabhost() {
tabhost=(TabHost)findViewById(android.R.id.tabhost);
tabhost.setup();
String[] tabnames={"Tab1","Tab2","Tab3","Tab4","Tab5","Tab6"};
for(int i=0;i<tabnames.length;i++)
{
TabHost.TabSpec tabSpac;
tabSpac=tabhost.newTabSpec(tabnames[i]);
tabSpac.setIndicator(tabnames[i]);
tabSpac.setContent(new FakeContent(getApplicationContext()));
tabhost.addTab(tabSpac);
}
tabhost.setOnTabChangedListener(this);
}
public class FakeContent implements TabContentFactory
{
Context context;
public FakeContent (Context mcontext) {
context=mcontext;
}
@Override
public View createTabContent(String tag) {
View fakeView=new View(context);
fakeView.setMinimumHeight(0);
fakeView.setMinimumWidth(0);
return null;
}
}
private void initViewpager() {
viewpager=(ViewPager)findViewById(R.id.view_pager);
List<Fragment> listFragments=new ArrayList<Fragment>();
listFragments.add(new Fragment1());
listFragments.add(new Fragment2());
listFragments.add(new Fragment3());
MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), listFragments);
viewpager.setAdapter(myFragmentPagerAdapter);
viewpager.setOnPageChangeListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onTabChanged(String tabId) {
// TODO Auto-generated method stub
int selectedItem=tabhost.getCurrentTab();
viewpager.setCurrentItem(selectedItem);
HorizontalScrollView hscroolview=(HorizontalScrollView)findViewById(R.id.h_scrool_view);
View tabView=tabhost.getCurrentTabView();
int scrollPos=tabView.getLeft()-(hscroolview.getWidth()-tabView.getWidth())/2;
hscroolview.smoothScrollTo(scrollPos, 0);
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int selectedItem) {
// TODO Auto-generated method stub
tabhost.setCurrentTab(selectedItem);
}
}
日志
10-24 18:38:13.091:E/AndroidRuntime(13748):致命异常:主要 10-24 18:38:13.091: E/AndroidRuntime(13748): java.lang.RuntimeException:无法启动活动 组件信息{com.example.tabhostviewpagerslidingmenu/com.example.tabhostviewpagerslidingmenu.MainActivity}: java.lang.NullPointerException 10-24 18:38:13.091: E/AndroidRuntime(13748):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970) 10-24 18:38:13.091: E/AndroidRuntime(13748): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995) 10-24 18:38:13.091: E/AndroidRuntime(13748): 在 android.app.ActivityThread.access$600(ActivityThread.java:128) 10-24 18:38:13.091:E/AndroidRuntime(13748):在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161) 10-24 18:38:13.091: E/AndroidRuntime(13748): 在 android.os.Handler.dispatchMessage(Handler.java:99) 10-24 18:38:13.091:E/AndroidRuntime(13748):在 android.os.Looper.loop(Looper.java:137) 10-24 18:38:13.091: E/AndroidRuntime(13748):在 android.app.ActivityThread.main(ActivityThread.java:4517) 10-24 18:38:13.091:E/AndroidRuntime(13748):在 java.lang.reflect.Method.invokeNative(Native Method) 10-24 18:38:13.091:E/AndroidRuntime(13748):在 java.lang.reflect.Method.invoke(Method.java:511) 10-24 18:38:13.091: E/AndroidRuntime(13748):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 10-24 18:38:13.091: E/AndroidRuntime(13748): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 10-24 18:38:13.091:E/AndroidRuntime(13748):在 dalvik.system.NativeStart.main(本机方法)10-24 18:38:13.091: E/AndroidRuntime(13748):原因:java.lang.NullPointerException 10-24 18:38:13.091: E/AndroidRuntime(13748): 在 android.widget.TabHost$FactoryContentStrategy.getContentView(TabHost.java:663) 10-24 18:38:13.091: E/AndroidRuntime(13748): 在 android.widget.TabHost.setCurrentTab(TabHost.java:356) 10-24 18:38:13.091:E/AndroidRuntime(13748):在 android.widget.TabHost.addTab(TabHost.java:246) 10-24 18:38:13.091: E/AndroidRuntime(13748):在 com.example.tabhostviewpagerslidingmenu.MainActivity.initTabhost(MainActivity.java:62) 10-24 18:38:13.091: E/AndroidRuntime(13748): 在 com.example.tabhostviewpagerslidingmenu.MainActivity.onCreate(MainActivity.java:42) 10-24 18:38:13.091: E/AndroidRuntime(13748): 在 android.app.Activity.performCreate(Activity.java:4470) 10-24 18:38:13.091:E/AndroidRuntime(13748):在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053) 10-24 18:38:13.091: E/AndroidRuntime(13748): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934) 10-24 18:38:13.091: E/AndroidRuntime(13748): ... 11 更多
【问题讨论】:
-
这不是您问题的答案,但
TabHost已弃用,现在不要使用它。尝试使用TabLayout,这是现在做事的方式...... :) -
然后用 tablayout 粘贴你的答案
-
抱歉,SO 不是您获得现成答案的地方......您会获得具体的指导,并且您应该尝试一下并返回具体的查询。
标签: android android-viewpager android-tabhost