断片Android 7 NougatからNullPointerExceptionが発生するのはなぜですか?
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();
}
}
私はそれがLayoutInflaterラインを実行するときR.layout.hometabとtabHostがnullでないことを確認するチェックした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>
が参照するXML彼らはうまくいくようです。彼らは正にnullではありません。また、LayoutInflaterを確認するためにチェックしました。
エラーを示すlogcatが表示されます。
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)
あなたの質問を編集し、クラッシュに関連するJavaスタックトレース全体を投稿してください。 – CommonsWare
あなたはどのデバイスを使用していますか? –
私はモトのテストをしていますg4 + –