代码之家  ›  专栏  ›  技术社区  ›  Faisal Mirza

android.widget.TabHost上的对象引用为空。setCurrentTab(int)[重复]

  •  -1
  • Faisal Mirza  · 技术社区  · 10 年前

    我正在与一个项目合作 Tabhost 在这里,我必须通过检测“手势”来实现刷卡功能。下面是我的代码

    public class GameItemListActivity extends TabActivity implements ViewPager.OnPageChangeListener {
    public TabHost host;
    private ViewPager pager;
    GestureDetectorCompat gestureDetectorCompat;
    private GestureDetector gestureScanner;
    public int currentTabposition;
    public TabHost.TabSpec spec;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_game);
        host = (TabHost) findViewById(android.R.id.tabhost);
    
       // pager = (ViewPager) findViewById(R.id.pager);
        Download_Class.applicationContext=GameItemListActivity.this;
        host.setup();
    
        spec = host.newTabSpec("tab1");
        spec.setContent(new Intent(this, Action_Activity.class));
        spec.setIndicator("Action");
        host.addTab(spec);
    
        spec = host.newTabSpec("tab2");
        spec.setContent(new Intent(this, Arcade_Activity.class));
        spec.setIndicator("Arcade");
        host.addTab(spec);
    
        spec = host.newTabSpec("tab3");
        spec.setContent(new Intent(this, Sport_Activity.class));
        spec.setIndicator("Sports");
        host.addTab(spec);
    
        spec = host.newTabSpec("tab4");
        spec.setContent(new Intent(this, Cards_Activity.class));
        spec.setIndicator("Top Games");
        host.addTab(spec);
    
        spec = host.newTabSpec("tab5");
        spec.setContent(new Intent(this, Racing_Activity.class));
        spec.setIndicator("Racing");
        host.addTab(spec);
    
        spec = host.newTabSpec("tab6");
        spec.setContent(new Intent(this, GameOfTheWeek.class));
        spec.setIndicator("Game Of\nThe Week");
        host.addTab(spec);
    
        spec = host.newTabSpec("tab7");
        spec.setContent(new Intent(this, Puzzle_Activity.class));
        spec.setIndicator("Puzzle");
        host.addTab(spec);
        currentTabposition= getTabHost().getCurrentTab();
        Log.d("chagecurrenttab", String.valueOf(getTabHost().getCurrentTab()));}
    

    点击选项卡可以更改选项卡。但当我想使用

    host.setCurrentTab(tab position)
    

    来自方法。它总是显示

    " void android.widget.TabHost.setCurrentTab(int) 对空对象引用“

    虽然我已经启动了tabhost

    host = (TabHost) findViewById(android.R.id.tabhost);
    

    详细错误如下所示。

    03-06 11:53:07.717 19772-19772/com.javatechig.gridviewexample W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TabHost.setCurrentTab(int)' on a null object reference
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at com.javatechig.gridviewexample.Picture.GameRelated.GameItemListActivity.setTabContent(GameItemListActivity.java:159)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at com.javatechig.gridviewexample.Picture.GameRelated.Arcade_Activity$2.onSwipeRight(Arcade_Activity.java:118)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at com.javatechig.gridviewexample.Picture.SwipeListener$GestureListener.onFling(SwipeListener.java:46)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.GestureDetector.onTouchEvent(GestureDetector.java:610)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at com.javatechig.gridviewexample.Picture.SwipeListener.onTouch(SwipeListener.java:24)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.View.dispatchTouchEvent(View.java:8832)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2569)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2239)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2610)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1779)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.app.Activity.dispatchTouchEvent(Activity.java:2853)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2571)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
    03-06 11:53:07.727 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
    03-06 11:53:07.737 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
    03-06 11:53:07.737 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
    03-06 11:53:07.737 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
    03-06 11:53:07.737 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
    03-06 11:53:07.737 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
    03-06 11:53:07.737 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
    03-06 11:53:07.737 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
    03-06 11:53:07.737 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
    03-06 11:53:07.737 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2581)
    03-06 11:53:07.737 19772-19772/com.javatechig.gridviewexample W/System.err:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
    03-06 11:53:07.737 19772-19772/com.javatechig.gridviewexample W/System.err:     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2610)
    

    请给我一个解决方案。任何解决方案都将不胜感激……提前谢谢

    2 回复  |  直到 10 年前
        1
  •  0
  •   Community Mohan Dere    5 年前

    除了“TabActivity在API级别13中被弃用”和“应用程序应该使用Fragments而不是TabActivaty”这一事实之外- Android Documentation

    就我个人而言,我认为你不应该使用 findViewById 因为已经有了获取TabHost的方法。

    公共选项卡主机getTabHost()

    返回活动用于承载其选项卡的TabHost。

    如果您看到该链接的“类概述”部分,它将向您展示一个示例XML布局和您需要使用的适当XML ID。

    也不清楚您在代码中调用的位置

    host.setCurrentTab
    

    因为如果 host 您问题中的代码为空,那么 host.setup() 将引发错误。

        2
  •  0
  •   Shree Krishna    10 年前

    可能是因为你正在使用 android.R 但可能不是,使用 R 只有 只需更换这条线

    host = (TabHost) findViewById(android.R.id.tabhost);
    

    具有

    host = (TabHost) findViewById(R.id.tabhost);
    

    代替

    <TabHost android:id="@+id/tabhost"
    

    具有

    <TabHost android:id="@android:id/tabhost"
    
    推荐文章