2014-12-23 32 views
0

我有兩個自定義按鈕添加和刪除,當我點擊添加選項卡工作良好後,當我刪除選項卡它的確定,但是當我刪除最後一個選項卡然後我得到以下錯誤。最後一項刪除TabPragment ViewPager中的錯誤android

java.lang.NullPointerException 
     at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3699) 
     at android.view.ViewGroup.removeViewAt(ViewGroup.java:3663) 
     at app.burhanimumineenbrowser.HomeActivity$3.onClick(HomeActivity.java:184) 
     at android.view.View.performClick(View.java:4191) 
     at android.view.View$PerformClick.run(View.java:17229) 
     at android.os.Handler.handleCallback(Handler.java:615) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:4963) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 

如果我刪除了第一個選項卡其刪除,第二個也刪除,但第三​​個選項卡後,我無法將其刪除,錯誤說我空指針。

這是添加按鈕代碼。

btNewtab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
       COUNT_TAB+=1; 
      // viewPager.setAdapter(mAdapter); 


      actionBar.addTab(actionBar.newTab().setText("New Tabs") 
        .setTabListener(HomeActivity.this)); 


      mAdapter.notifyDataSetChanged(); 
     } 
    }); 

刪除按鈕的代碼。

btCloseTab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if(COUNT_TAB>0) { 
       if(TAB_CURRENT>=0 && PAGE_CURRENT>=0) { 
        System.out.println("CLOSE PAGE AND TAB : "+TAB_CURRENT+" AND "+PAGE_CURRENT); 
        COUNT_TAB -=1; 
        // int ichektab=TAB_CURRENT-1; 
        int ip=viewPager.getCurrentItem(); 

        viewPager.removeViewAt(ip); 
        actionBar.removeTabAt(TAB_CURRENT); 

        //actionBar.removeTab(iTab); 
        mAdapter.notifyDataSetChanged(); 

       //  viewPager.destroyDrawingCache(); 
        /* if(ichektab>0){ 
         // viewPager.setCurrentItem(ichektab); 

           viewPager.setCurrentItem(ichektab); 
          //actionBar.removeTabAt(TAB_CURRENT); 
        }*/ 

      } 
       } 
     } 
    }); 

我的適配器

public class TabsPageAdapter extends FragmentStatePagerAdapter { 

    private long baseId = 0; 
    public TabsPageAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int i) { 
     return new MyWebBrowser(); 
    } 

    @Override 
    public int getItemPosition(Object object) { 
     return PagerAdapter.POSITION_NONE; 
    } 

    @Override 
    public int getCount() { 

     return COUNT_TAB; 
    } 
    } 
} please kindly suggest me about this error. Thanks 

回答

0

最後我解決錯誤。 原因是viewpager尋呼機的屏幕限制。默認情況下,有viewpager有兩所的限制,但我寫我第一次用這個代碼

viewPager.setOffscreenPageLimit(COUNT_TAB); 

而且我解決它

viewPager.setOffscreenPageLimit(500); 

,如果使用COUNT_TAB然後添加按鈕的代碼是

btNewtab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
       // COUNT_TAB+=1; 
      // viewPager.setAdapter(mAdapter); 


      actionBar.addTab(actionBar.newTab().setText("New Tabs") 
        .setTabListener(HomeActivity.this)); 

      COUNT_TAB+=1; 

      mAdapter.notifyDataSetChanged(); 
      viewPager.setOffscreenPageLimit(COUNT_TAB); 

     } 
    }); 

notifydatasetchanged後放置呼叫限制。 希望你們明白。

0

使用此代碼刪除按鈕: 移除標籤ü使COUNT_TAB減少,因此波谷的NullPointerException

也addtab按鈕去年增加計數卡口前

btCloseTab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if(COUNT_TAB>0) { 
       if(TAB_CURRENT>=0 && PAGE_CURRENT>=0) { 
        System.out.println("CLOSE PAGE AND TAB : "+TAB_CURRENT+" AND "+PAGE_CURRENT); 

        // int ichektab=TAB_CURRENT-1; 
        int ip=viewPager.getCurrentItem(); 

        viewPager.removeViewAt(ip); 
        actionBar.removeTabAt(TAB_CURRENT); 

        //actionBar.removeTab(iTab); 
        mAdapter.notifyDataSetChanged(); 
COUNT_TAB -=1; 

       //  viewPager.destroyDrawingCache(); 
        /* if(ichektab>0){ 
         // viewPager.setCurrentItem(ichektab); 

           viewPager.setCurrentItem(ichektab); 
          //actionBar.removeTabAt(TAB_CURRENT); 
        }*/ 

      } 
       } 
     } 
    }); 

查看尋呼機頁面c焊割聽衆

viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener(){ 

     @Override 
     public void onPageScrolled(int i, float v, int i2) { 
      NUM_TABS=i+1; 
      btTabCount.setText(""+NUM_TABS); 

     } 

     @Override 
     public void onPageSelected(int i) { 

      getActionBar().setSelectedNavigationItem(i); 
      PAGE_CURRENT=i; 
      System.out.println("CURRENT PAGE DISCRIPTION : "+PAGE_CURRENT); 
      mAdapter.notifyDataSetChanged(); 

     } 

     @Override 
     public void onPageScrollStateChanged(int i) { 

     } 
    }); 

選項卡監聽器方法

@Override 
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { 
    mAdapter.notifyDataSetChanged(); 
    viewPager.setCurrentItem(tab.getPosition()); 
    TAB_CURRENT=tab.getPosition(); 
    iTab=tab; 

    System.out.println("CURRENT TAB DISCRIPTION : "+TAB_CURRENT); 


} 

@Override 
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { 
    // viewPager.setCurrentItem(tab.getPosition()); 

} 

@Override 
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { 
    //viewPager.setCurrentItem(tab.getPosition()); 

} 
+0

感謝兄弟爲您的重播,但錯誤是Stilll .... –

+0

我更新以上問題我的viewpager行動和標籤監聽器實現方法。請重新檢查它。再次感謝 –

+0

而且當我刪除viewpager視圖,當我添加新的時候,它會打開在同一位置的私人刪除視圖 –

相關問題