2017-01-04 1 views
4

Le fragmentPourquoi est-ce que je reçois une NullPointerException d'Android 7 Nougat?

public class PropertyHomeTabListScreen extends Fragment { 


    private String TAG = "PropertyHomeTabListScreen"; 
    TabsPagerAdapter tabsAdapter; 
    ViewPager viewPager; 
    TabHost tabHost; 
    private int totalCount = 0; 
    private int currentTabid = 0; 
    private String name = null; 
    private String[] tabName = {"enquiries","properties","seller profile","more"}; 
    private DataHandler dataHandler; 
    private String homeScreenStatus = null; 
    SharedPreferences sharedPreferences; 
    private int customerId = 0; 
    AllCustomersObject allCustomersObject; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     final View rootView = inflater.inflate(R.layout.homescreen_tablist,null); 
     sharedPreferences = getActivity().getSharedPreferences("CUSTOMER", MODE_PRIVATE); 
     customerId = sharedPreferences.getInt("user_id", 0); 
     GetProfile getProfile = new GetProfile(getActivity(), customerId); 
     getProfile.execute(); 
     SharedPreferences userprofile =getActivity().getSharedPreferences("USER_PROFILE",getActivity().MODE_PRIVATE); 
     allCustomersObject = new AllCustomersObject(); 
     allCustomersObject.setname(userprofile.getString("username",null)); 
     allCustomersObject.setImageUrl(userprofile.getString("image_path",null)); 
     allCustomersObject.setPhonenumber(userprofile.getString("user_phone",null)); 



     dataHandler = DataHandler.getDataHandler(); 
     tabHost = (TabHost) rootView.findViewById(android.R.id.tabhost); 
     tabHost.setup(); 
     viewPager=(ViewPager) rootView.findViewById(R.id.viewpager); 

     initialiseTabHost(); 
     tabsAdapter=new TabsPagerAdapter(getActivity(),getFragmentManager(),totalCount); 
     viewPager.setAdapter(tabsAdapter); 

     viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
       View tabView = tabHost.getTabWidget().getChildAt(position); 
       View mHorizontalScroll = (HorizontalScrollView) rootView.findViewById(R.id.horizontallistview); 
       try { 
        if (tabView != null) { 
         int width = mHorizontalScroll.getWidth(); 
         int scrollPos = tabView.getLeft() - (width - tabView.getWidth())/2; 
         mHorizontalScroll.scrollTo(scrollPos,0); 
        } else { 
         mHorizontalScroll.scrollBy(positionOffsetPixels, 0); 
        } 
        try { 
         homeScreenStatus = dataHandler.getHomeScreenStatus(); 
         if (homeScreenStatus != null && !homeScreenStatus.isEmpty()) { 
          if (homeScreenStatus.equalsIgnoreCase("homescreen")) { 
           currentTabid = dataHandler.getCurrentHomeScreenTab(); 
           tabHost.getTabWidget().setCurrentTab(currentTabid); 
           viewPager.setCurrentItem(currentTabid); 
           dataHandler.setHomeScreenStatus("nothomescreen"); 
          } else { 
           int pos = viewPager.getCurrentItem(); 
           dataHandler.setHomeScreenStatus("nothomescreen"); 
           dataHandler.setCurrentHomeScreenTab(pos); 
           viewPager.setCurrentItem(pos); 
           tabHost.setCurrentTab(pos); 
          } 
         } else { 
          int pos = viewPager.getCurrentItem(); 
          dataHandler.setHomeScreenStatus("nothomescreen"); 
          dataHandler.setCurrentHomeScreenTab(pos); 
          viewPager.setCurrentItem(pos); 
          tabHost.setCurrentTab(pos); 
         } 
        } catch (Exception e) { 
         e.printStackTrace(); 
        } 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
      @Override 
      public void onPageSelected(int position) { 
      } 
      @Override 
      public void onPageScrollStateChanged(int state) { 
      } 
     }); 

     return rootView; 

    } 


    /** 
    * Below function is used for Add the tab 
    * @param activity 
    * @param tabHost 
    * @param tabSpec 
    */ 
    private static void AddTab(Activity activity, TabHost tabHost, TabHost.TabSpec tabSpec) { 
     tabSpec.setContent(new MyTabFactory(activity)); 
     tabHost.addTab(tabSpec); 
    } 

    /** 
    * Below function is used for initialize the tabhost and set the which tab is Active or not. 
    */ 
    private void initialiseTabHost() { 
     int tabCount = 4; 
     for(int i= 0;i < tabCount;i++) { 
      name = tabName[i]; 
      AddTab(getActivity(),this.tabHost,this.tabHost.newTabSpec(name).setIndicator(name)); 
     } 

     try { 
      homeScreenStatus = dataHandler.getHomeScreenStatus(); 

      if (homeScreenStatus != null && !homeScreenStatus.isEmpty()) { 
       if (homeScreenStatus.equalsIgnoreCase("homescreen")) { 
        currentTabid = dataHandler.getCurrentHomeScreenTab(); 
        tabHost.getTabWidget().setCurrentTab(currentTabid); 
        viewPager.setCurrentItem(currentTabid); 
       } else { 
        dataHandler.setHomeScreenStatus("nothomescreen"); 
        tabHost.getTabWidget().setCurrentTab(0); 
        viewPager.setCurrentItem(0); 
       } 
      } else { 
       dataHandler.setHomeScreenStatus("nothomescreen"); 
       tabHost.getTabWidget().setCurrentTab(0); 
       viewPager.setCurrentItem(0); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() { 
      @Override 
      public void onTabChanged(String s) { 
       int pos = tabHost.getCurrentTab(); 
       dataHandler.setHomeScreenStatus("nothomescreen"); 
       dataHandler.setCurrentHomeScreenTab(pos); 
       viewPager.setCurrentItem(pos); 
       tabHost.getTabWidget().setCurrentTab(pos); 
      } 
     }); 

     totalCount = tabHost.getTabWidget().getTabCount(); 

    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
    } 

} 

Le XML référencé par R.layout.hometab

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <FrameLayout android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:weightSum="10" 
     android:background="@color/screen_background"> 

     <TabHost 
      android:id="@android:id/tabhost" 
      android:layout_width="fill_parent" 
      android:layout_height="0dip" 
      android:layout_weight="10"> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" > 

       <HorizontalScrollView 
        android:id="@+id/horizontallistview" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:fillViewport="true" 
        android:background="@color/greycolor" 
        android:scrollbars="none" > 

        <TabWidget 
         android:id="@android:id/tabs" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
         android:tabStripEnabled="true" 
         android:background="@color/overallcolor" 
         android:orientation="horizontal"/> 

       </HorizontalScrollView> 

       <FrameLayout 
        android:id="@android:id/tabcontent" 
        android:layout_width="0dp" 
        android:layout_height="0dp" 
        android:layout_weight="0" /> 

       <android.support.v4.view.ViewPager 
        android:id="@+id/viewpager" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_gravity="bottom" /> 

      </LinearLayout> 

     </TabHost> 

    </LinearLayout> 

</android.support.v4.widget.DrawerLayout> 

J'ai vérifié pour vous assurer R.layout.hometab et tabHost ne sont pas nulles quand il exécute la ligne de LayoutInflater et ils ont l'air d'aller bien. Ils ne sont définitivement pas nulles. J'ai aussi vérifié pour m'assurer que LayoutInflater.

Le logcat indiquant l'erreur indique.

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.graphics.drawable.Drawable.setState(int[])' on a null object reference 
                         at android.widget.TabWidget.dispatchDraw(TabWidget.java:378) 
                         at android.view.View.draw(View.java:17086) 
                         at android.view.View.updateDisplayListIfDirty(View.java:16065) 
                         at android.view.View.draw(View.java:16849) 
                         at android.view.ViewGroup.drawChild(ViewGroup.java:3768) 
                         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) 
                         at android.view.View.draw(View.java:17086) 
                         at android.widget.HorizontalScrollView.draw(HorizontalScrollView.java:1643) 
                         at android.view.View.updateDisplayListIfDirty(View.java:16065) 
                         at android.view.View.draw(View.java:16849) 
                         at android.view.ViewGroup.drawChild(ViewGroup.java:3768) 
                         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) 
                         at android.view.View.updateDisplayListIfDirty(View.java:16060) 
                         at android.view.View.draw(View.java:16849) 
                         at android.view.ViewGroup.drawChild(ViewGroup.java:3768) 
                         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) 
                         at android.view.View.updateDisplayListIfDirty(View.java:16060) 
                         at android.view.View.draw(View.java:16849) 
                         at android.view.ViewGroup.drawChild(ViewGroup.java:3768) 
                         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) 
                         at android.view.View.draw(View.java:17086) 
                         at android.view.View.updateDisplayListIfDirty(View.java:16065) 
                         at android.view.View.draw(View.java:16849) 
                         at android.view.ViewGroup.drawChild(ViewGroup.java:3768) 
                         at android.support.v4.widget.DrawerLayout.drawChild(DrawerLayout.java:1379) 
                         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) 
                         at android.view.View.updateDisplayListIfDirty(View.java:16060) 
                         at android.view.View.draw(View.java:16849) 
                         at android.view.ViewGroup.drawChild(ViewGroup.java:3768) 
                         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) 
                         at android.view.View.updateDisplayListIfDirty(View.java:16060) 
                         at android.view.View.draw(View.java:16849) 
                         at android.view.ViewGroup.drawChild(ViewGroup.java:3768) 
                         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) 
                         at android.view.View.updateDisplayListIfDirty(View.java:16060) 
                         at android.view.View.draw(View.java:16849) 
                         at android.view.ViewGroup.drawChild(ViewGroup.java:3768) 
                         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) 
                         at android.view.View.updateDisplayListIfDirty(View.java:16060) 
                         at android.view.View.draw(View.java:16849) 
                         at android.view.ViewGroup.drawChild(ViewGroup.java:3768) 
                         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) 
                         at android.view.View.updateDisplayListIfDirty(View.java:16060) 
                         at android.view.View.draw(View.java:16849) 
                         at android.view.ViewGroup.drawChild(ViewGroup.java:3768) 
                         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) 
                         at android.view.View.updateDisplayListIfDirty(View.java:16060) 
                         at android.view.View.draw(View.java:16849) 
                         at android.view.ViewGroup.drawChild(ViewGroup.java:3768) 
                         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) 
                         at android.view.View.updateDisplayListIfDirty(View.java:16060) 
                         at android.view.View.draw(View.java:16849) 
                         at android.view.ViewGroup.drawChild(ViewGroup.java:3768) 
                         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) 
                         at android.view.View.updateDisplayListIfDirty(View.java:16060) 
                         at android.view.View.draw(View.java:16849) 
                         at android.view.ViewGroup.drawChild(ViewGroup.java:3768) 
                         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) 
                         at android.view.View.updateDisplayListIfDirty(View.java:16060) 
                         at android.view.View.draw(View.java:16849) 
                         at android.view.ViewGroup.drawChild(ViewGroup.java:3768) 
                         at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3554) 
                         at android.view.View.draw(View.java:17086) 
                         at com.android.internal.policy.DecorView.draw(DecorView.java:751) 
                         at android.view.View.updateDisplayListIfDirty(View.java:16065) 
+1

Veuillez modifier votre question et publier l'intégralité de la trace de la pile Java associée à votre erreur. – CommonsWare

+0

quel appareil utilisez-vous? –

+0

je suis en train de tester avec moto g4 + –

Répondre

3

J'ai eu le même problème. Mais quand j'ai supprimé android:tabStripEnabled="true" de ma mise en page, le problème est parti.

+0

Vous avez sauvé ma journée! Cela a fonctionné aussi pour moi. – thpitsch