我正在尝试使用自定义适配器和列表视图。目前我正在尝试填充列表视图,但我收到了这个错误,我已经坚持了很长时间。如果有人有时间帮助我,我真的可以使用一些指导。非常感谢。
weatherActivity.xml
---------------------
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/weather_day"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="weather day"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/weather_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/weather_day"
android:layout_centerHorizontal="true"
android:text="weather desc"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/weather_wind_dir"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/weather_pic"
android:layout_centerVertical="true"
android:text="weather_wind_dir"
android:textAppearance="?android:attr/textAppearanceSmall" />
<ListView
android:id="@+id/weather_list"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true" >
</ListView>
<ImageView
android:id="@+id/weather_pic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/weather_desc"
android:layout_centerHorizontal="true"
android:src="@drawable/butterfly" />
<TextView
android:id="@+id/weather_wind_spd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/weather_wind_dir"
android:layout_alignBottom="@+id/weather_wind_dir"
android:layout_alignLeft="@+id/weather_pic"
android:text="weather_wind_spd"
android:textAppearance="?android:attr/textAppearanceSmall" />
</RelativeLayout>
-------
weather_list_row.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="50dp"
android:orientation="horizontal"
android:padding="5dip" >
<TextView
android:id="@+id/we_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textStyle="bold"
android:typeface="sans" />
</RelativeLayout>
-------------
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
public class weatherActivity extends Activity {
Context context = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.weather_activity);
Cursor cursor = context.getContentResolver().query(ContentProvider.WEATHER_TEMPERATURES_URI, null, null, null, null);
weatherCustomAdapter WCA = new weatherCustomAdapter(this, cursor, false);
ListView lv = (ListView) findViewById(R.id.weather_list);
lv.setAdapter(WCA);
}
}
-------
public class weatherCustomAdapter extends CursorAdapter
{
private LayoutInflater inflater;
private Context context;
private ViewHolder holder;
public static class ViewHolder {
public TextView desc;
public TextView title;
}
public weatherCustomAdapter(Context context, Cursor c, boolean autoRequery) {
super(context, c, autoRequery);
// TODO Auto-generated constructor stub
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// TODO Auto-generated method stub
Log.d("Weather", "We're at bindView!");
holder = (ViewHolder) view.getTag();
int descIndex = cursor.getColumnIndex(WeatherTemperatures.MAIN_DESC);
String desc = cursor.getString(descIndex);
Log.d("Weather", "We're at bindView1!");
holder.desc.setText(desc);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
Log.d("Weather", "We're at newView!");
View view = inflater.inflate(R.layout.weather_list_row, parent, false);
Log.d("Weather", "We're at newView1!");
holder = new ViewHolder();
holder.desc = (TextView) view.findViewById(R.id.we_title);
holder.desc.setBackgroundColor(Color.argb(100, 0, 0, 0));
holder.desc.setTextColor(Color.WHITE);
Log.d("Weather", "We're at newView2!");
view.setTag(holder);
Log.d("Weather", "We're at newView3!");
return view;
}
}
------------
And finally, the error
12-03 18:47:20.234: E/AndroidRuntime(11533): FATAL EXCEPTION: main
12-03 18:47:20.234: E/AndroidRuntime(11533): Process: com.a_v1, PID: 11533
12-03 18:47:20.234: E/AndroidRuntime(11533): java.lang.NullPointerException
12-03 18:47:20.234: E/AndroidRuntime(11533): at com.a_v1.weatherCustomAdapter.newView(weatherCustomAdapter.java:48)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.support.v4.widget.CursorAdapter.getView(CursorAdapter.java:252)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.widget.AbsListView.obtainView(AbsListView.java:2263)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.widget.ListView.makeAndAddView(ListView.java:1790)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.widget.ListView.fillDown(ListView.java:691)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.widget.ListView.fillFromTop(ListView.java:752)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.widget.ListView.layoutChildren(ListView.java:1630)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.widget.AbsListView.onLayout(AbsListView.java:2091)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.View.layout(View.java:14785)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.View.layout(View.java:14785)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.View.layout(View.java:14785)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-03 18:47:20.234: E/AndroidRuntime(11533): at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:374)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.View.layout(View.java:14785)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.View.layout(View.java:14785)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.ViewGroup.layout(ViewGroup.java:4631)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1985)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1742)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5582)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.Choreographer.doCallbacks(Choreographer.java:562)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.Choreographer.doFrame(Choreographer.java:532)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.os.Handler.handleCallback(Handler.java:733)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.os.Handler.dispatchMessage(Handler.java:95)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.os.Looper.loop(Looper.java:137)
12-03 18:47:20.234: E/AndroidRuntime(11533): at android.app.ActivityThread.main(ActivityThread.java:4998)
12-03 18:47:20.234: E/AndroidRuntime(11533): at java.lang.reflect.Method.invokeNative(Native Method)
12-03 18:47:20.234: E/AndroidRuntime(11533): at java.lang.reflect.Method.invoke(Method.java:515)
12-03 18:47:20.234: E/AndroidRuntime(11533): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
12-03 18:47:20.234: E/AndroidRuntime(11533): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
12-03 18:47:20.234: E/AndroidRuntime(11533): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:0)
您尚未初始化inflater
。你在那里得到空指针异常。初始化inflater
并检查它是否有效。
您可以在自定义适配器的constructor
中初始化它
public weatherCustomAdapter(Context context, Cursor c, boolean autoRequery) {
super(context, c, autoRequery);
// TODO Auto-generated constructor stub
this.context = context;
inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}