【发布时间】:2014-05-13 18:15:54
【问题描述】:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
View vi= convertView;
if(convertView==null){
viewHolder = new ViewHolder();
vi = inflater.inflate(R.layout.list_row, null);
viewHolder.content = (TextView)vi.findViewById(R.id.f_content);
viewHolder.cat_id = (TextView)vi.findViewById(R.id.c_id);
viewHolder.fact_id = (TextView)vi.findViewById(R.id.f_id);
vi.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
HashMap<String, String> fact = new HashMap<String, String>();
fact = data.get(position);
// Setting all values in listview
viewHolder.fact_id.setText(fact.get("_id"));
viewHolder.cat_id.setText(fact.get("cat_id"));
viewHolder.content.setText(fact.get("fact_content"));
return vi;
}
我创建了一个 LazyAdapter,它扩展了一个 BaseAdaper 以与 ListView 一起使用。
此适配器在 ListView 中填充数据。当我单击前 4 个可见列表项时,它会打印该项目的值。 问题是当我向下滚动列表视图并单击第 5 项时。应用程序崩溃说空指针异常。日志跟踪在这里供参考。
05-13 23:10:43.943:E/AndroidRuntime(3360):致命异常:主要 05-13 23:10:43.943: E/AndroidRuntime(3360): java.lang.NullPointerException 05-13 23:10:43.943: E/AndroidRuntime(3360): at com.example.facts.MainActivity$3.onItemClick(MainActivity.java:100) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 android.widget.AdapterView.performItemClick(AdapterView.java:284) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 android.widget.ListView.performItemClick(ListView.java:3569) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 android.widget.AbsListView$PerformClick.run(AbsListView.java:1831) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 android.os.Handler.handleCallback(Handler.java:587) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 android.os.Handler.dispatchMessage(Handler.java:92) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 android.os.Looper.loop(Looper.java:150) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 android.app.ActivityThread.main(ActivityThread.java:4389) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 java.lang.reflect.Method.invokeNative(Native Method) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 java.lang.reflect.Method.invoke(Method.java:507) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) 05-13 23:10:43.943: E/AndroidRuntime(3360): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) 05-13 23:10:43.943: E/AndroidRuntime(3360): at dalvik.system.NativeStart.main(Native Method)
Onclick 方法是这样的:
// Click event for single list row
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
RelativeLayout node = (RelativeLayout)parent.getChildAt(position);
TextView fact = (TextView) node.findViewById(R.id.c_id);
Log.d("ListItem Clicked", "id: " + id + " position: "
+ position + " artist " + fact.getText());
}
});
【问题讨论】:
-
您需要向我们展示
onItemClick方法,这就是错误所在。 -
@ashishduh 我已经编辑了这个问题。在列表中包含 onclick 方法。
标签: java android eclipse listview listadapter