Reputation: 213
I'm working with tabs and fragments within them. Got that weird runtime error at one of the fragments:
Logcat:
05-13 09:52:46.052 1276-1276/com.myapp.gridview E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.myapp.gridview, PID: 1276
java.lang.NullPointerException
at com.myapp.gridview.BoardsFragment.onResume(BoardsFragment.java:34)
at android.support.v4.app.Fragment.performResume(Fragment.java:1543)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:974)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:478)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
at android.view.View.measure(View.java:16497)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
at android.view.View.measure(View.java:16497)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
and the fragment itslef:
import android.content.Context;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class BoardsFragment extends Fragment{
private GridView gridView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.activity_main, container, false);
gridView = (GridView) v.findViewById(R.id.gridview);
return v;
}
@Override
public void onResume(){
super.onResume();
gridView.setAdapter(new MyAdapter(getActivity()));
}
private class MyAdapter extends BaseAdapter
{
private List<Item> items = new ArrayList<Item>();
private LayoutInflater inflater;
public MyAdapter(Context context)
{
inflater = LayoutInflater.from(context);
items.add(new Item("APO Supreme", R.drawable.snb_apo_supreme));
items.add(new Item("Arbor Blacklist", R.drawable.snb_arbor_blacklist));
items.add(new Item("Arbor Draft", R.drawable.snb_arbor_draft));
items.add(new Item("Arbor Relapse", R.drawable.snb_arbor_relapse));
items.add(new Item("Capita Defenders of Awesome", R.drawable.snb_capita_defenders_of_awesome));
items.add(new Item("Capita Outsiders", R.drawable.snb_capita_outsiders));
items.add(new Item("Capita Ultrafear", R.drawable.snb_capita_ultrafear));
items.add(new Item("DC Focus", R.drawable.snb_dc_focus));
items.add(new Item("DC Mega", R.drawable.snb_dc_mega));
items.add(new Item("DC Tone", R.drawable.snb_dc_tone));
items.add(new Item("ROME Agent", R.drawable.snb_rome_agent));
items.add(new Item("ROME Agent Rocker", R.drawable.snb_rome_agent_rocker));
items.add(new Item("ROME Hammerhead", R.drawable.snb_rome_hammerhead));
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int i)
{
return items.get(i);
}
@Override
public long getItemId(int i)
{
return items.get(i).picId;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup)
{
View v = view;
ImageView picture;
TextView name;
if(v == null)
{
v = inflater.inflate(R.layout.gridview_item, viewGroup, false);
v.setTag(R.id.picture, v.findViewById(R.id.picture));
v.setTag(R.id.text, v.findViewById(R.id.text));
}
picture = (ImageView)v.getTag(R.id.picture);
name = (TextView)v.getTag(R.id.text);
Item item = (Item)getItem(i);
picture.setImageResource(item.picId);
name.setText(item.name);
return v;
}
private class Item
{
final String name;
final int picId;
Item(String name, int drawableId)
{
this.name = name;
this.picId = drawableId;
}
}
}
}
Any ideas what's wrong with onResume()
here? Perhabs it is related with support.v4
library. Probably those libraries need some "special" overriden onResume etc?
Thanks for answers
EDIT:
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.myapp.gridview.MainActivity" />
fragment_main.xml with GridView:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<GridView
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:verticalSpacing="0dp"
android:horizontalSpacing="0dp"
android:stretchMode="columnWidth"
android:numColumns="2"
/>
</FrameLayout>
Upvotes: 0
Views: 2008
Reputation: 4135
There are only two possibilities. gridView or getActivity() is null. You can detect this easily. Put a breakpoint on this line. Debug your app. Then select gridView and hit cmd+shift+I combination to see the value of gridView (repeat these steps for getActivity()).
If gridView is null then you can initialise it in onResume().
If getActivity() is null then you should override onActivityCreated() and set gridView adapter in there.
Upvotes: 0
Reputation: 133560
Any ideas what's wrong with onResume() here?
Nothing wrong.
Perhabs it is related with support.v4 library.
NUllPointerException
not related to support library
Probably those libraries need some "special" overriden onResume etc?
There is no special onResume
for libraries
You have
View v = inflater.inflate(R.layout.activity_main, container, false);
I am guessing you are inflating Activity
layout in Fragment
. gridView
is null.
It should probably be
View v = inflater.inflate(R.layout.fragment_main, container, false);
You probably have GridView
in fragment_main.xml
Upvotes: 3