【问题标题】:last item removing error in ViewPager on TabFragment androidTabFragment android上ViewPager中的最后一项删除错误
【发布时间】:2014-12-23 06:44:26
【问题描述】:

我有两个自定义按钮添加和删除,当我单击添加选项卡时工作良好,当我删除选项卡后它就可以了,但是当我删除最后一个选项卡时,我得到以下错误。

    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)

当我删除第一个选项卡时它的 del ,第二个也删除但在第三个选项卡之后我无法删除它,错误说我是空指针。

这里是添加按钮代码。

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

【问题讨论】:

    标签: android webview android-studio


    【解决方案1】:

    在删除按钮中使用此代码: 在删除制表符之前,你使 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);
                         }*/
    
                 }
                    }
            }
        });
    

    查看 Pager 页面更改监听器

    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());
    
    }
    

    【讨论】:

    • 我更新了上面的问题,我的 viewpager 操作和选项卡侦听器实现方法。请重新制作它。再次感谢
    • 当我删除 viewpager 视图并添加新视图时,它将在同一位置打开 privous 删除视图
    【解决方案2】:

    最后我解决了错误。 原因是 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 之后设置寻呼机限制。 希望大家理解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      • 2021-08-24
      相关资源
      最近更新 更多