Reputation: 9
I have this error in my bindView()
method. I have written a lot of adapters before, but now I don't understand the cause of this issue.
So, I have a view pager and a ListFragment in one screen. This list populated from content provider through a ResourceCursorAdapter. The code:
public class CityFragment extends ListFragment implements LoaderCallbacks<Cursor>{
public final static int CITIES_LIST = 0;
CityAdapter adapter;
public static CityFragment newInstance() {
CityFragment cityFragment = new CityFragment();
return cityFragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.city_layout, container, false);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
adapter = new CityAdapter(getActivity(),
R.layout.city_row,
null,
CursorAdapter.FLAG_AUTO_REQUERY);
// adapter = new SimpleCursorAdapter(getActivity().getApplicationContext(),
// android.R.layout.simple_list_item_2,
// null,
// new String[] {Schema.Cities.name,
Schema.Cities.activeCamerasCount},
// new int[] {android.R.id.text1, android.R.id.text2});
setListAdapter(adapter);
getLoaderManager().initLoader(CITIES_LIST, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle arg1) {
return new CursorLoader(getActivity(),
CustomContentProvider.CITIES_URI,
new String[] { Schema.Cities._id, Schema.Cities.name, Schema.Cities.activeCamerasCount },
null,
null,
null);
}
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
adapter.changeCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
adapter.changeCursor(null);
}
}
public class CityAdapter extends ResourceCursorAdapter {
private int cityIdx;
private int cameraIdx;
public CityAdapter(Context context, int layout, Cursor c, int flags) {
super(context, layout, c, flags);
initColumns(c);
}
@Override
public void changeCursor(Cursor cursor) {
super.changeCursor(cursor);
initColumns(cursor);
}
@Override
public void bindView(View v, Context ctx, Cursor c) {
ViewHolder holder = (ViewHolder) v.getTag();
holder.city.setText(c.getString(cityIdx));
holder.camera.setText(c.getString(cameraIdx));
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = super.newView(context, cursor, parent);
// LayoutInflater inflater = LayoutInflater.from(context);
// View view = inflater.inflate(R.layout.city_row, parent, false);
view.setTag(new ViewHolder(
(TextView) view.findViewById(R.id.city),
(TextView) view.findViewById(R.id.cameras_count)));
return view;
}
private void initColumns(final Cursor c) {
if (c != null) {
cityIdx = c.getColumnIndex(Schema.Cities.name);
cameraIdx = c.getColumnIndex(Schema.Cities.camerasCount);
}
}
private class ViewHolder {
final TextView city;
final TextView camera;
public ViewHolder(final TextView city, final TextView camera) {
this.city = city;
this.camera = camera;
}
}
}
08-10 21:21:19.641: E/AndroidRuntime(414): java.lang.NullPointerException
08-10 21:21:19.641: E/AndroidRuntime(414): at ru.viewcity.ui.CityAdapter.bindView(CityAdapter.java:34)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.support.v4.widget.CursorAdapter.getView(CursorAdapter.java:256)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.AbsListView.obtainView(AbsListView.java:1430)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.ListView.makeAndAddView(ListView.java:1745)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.ListView.fillDown(ListView.java:670)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.ListView.fillFromTop(ListView.java:727)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.ListView.layoutChildren(ListView.java:1598)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.AbsListView.onLayout(AbsListView.java:1260)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.view.View.layout(View.java:7175)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.view.View.layout(View.java:7175)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.view.View.layout(View.java:7175)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1141)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.view.View.layout(View.java:7175)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.view.View.layout(View.java:7175)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.view.View.layout(View.java:7175)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.view.View.layout(View.java:7175)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.view.View.layout(View.java:7175)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.view.ViewRoot.performTraversals(ViewRoot.java:1140)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.os.Handler.dispatchMessage(Handler.java:99)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.os.Looper.loop(Looper.java:123)
08-10 21:21:19.641: E/AndroidRuntime(414): at android.app.ActivityThread.main(ActivityThread.java:3683)
08-10 21:21:19.641: E/AndroidRuntime(414): at java.lang.reflect.Method.invokeNative(Native Method)
08-10 21:21:19.641: E/AndroidRuntime(414): at java.lang.reflect.Method.invoke(Method.java:507)
08-10 21:21:19.641: E/AndroidRuntime(414): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-10 21:21:19.641: E/AndroidRuntime(414): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-10 21:21:19.641: E/AndroidRuntime(414): at dalvik.system.NativeStart.main(Native Method)
In code you can see that I also try to use a SimpleCursorAdapter - it works well. In debug mode I see that in newView() method all TextView are set correctly but in bindView() these TextViews don't exist - they are null.
How can I resolve this?
Upvotes: 0
Views: 1149
Reputation: 465
Just debug and check the running flow may be you trying to setText() of TextView before finding it (finViewById) may be that's why you getting null text view .
Upvotes: 2