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)
Veuillez modifier votre question et publier l'intégralité de la trace de la pile Java associée à votre erreur. – CommonsWare
quel appareil utilisez-vous? –
je suis en train de tester avec moto g4 + –