【发布时间】:2016-02-24 00:37:19
【问题描述】:
我为我的 Listview 创建了一个自定义适配器,这个 ListView 的每个元素都有不同的字段
/*In my CustomListViewAdapter*/
private class ViewHolder {
TextView txtNombre;
TextView txtTicket;
TextView txtAsiento;
TextView txtOrden;
TextView txtNumero;
TextView txtMensaje;
TextView txtAdicionales;
TextView txtOtros;
TextView txtCategoria;
Button btn;
}
我有一个异步任务,它运行此列表中的每个单元格,并根据此时没有相关性的结果修改数据。
protected void onPostExecute(Void result) {
super.onPostExecute(result);
listView = (ListView) findViewById(R.id.listView1);
SessionManager s = new SessionManager();
View v;
Button b;
TextView mensaje;
for (int i = 0; i < listView.getCount(); i++) {
v = listView.getChildAt(i);
mensaje = (TextView) v.findViewById(R.id.txtMensaje);
if(!mensaje.getText().equals("E-ticket ya validado")){
mensaje.setText("E-ticket validado");
mensaje.setVisibility(View.VISIBLE);
b = (Button) v.findViewById(R.id.button1);
b.setBackgroundResource(R.drawable.icon_big_check);
b.setText("");
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams((int)LayoutParams.WRAP_CONTENT, (int)LayoutParams.WRAP_CONTENT);
params.width = 50;
params.height = 50;
params.rightMargin = 63;
params.topMargin = 10;
params.bottomMargin = 5;
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
b.setLayoutParams(params);
}
}
//MORE code.....
问题是我收到以下错误:
02-23 12:41:07.249: E/AndroidRuntime(32585): java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
02-23 12:41:07.249: E/AndroidRuntime(32585): at com.google.zxing.client.android.ValidacionMultiple$validarTodasInscripciones.onPostExecute(ValidacionMultiple.java:359)
第 359 行是message = (TextView) v.findViewById (R.id.txtMensaje);
我在布局中的列表视图
<ListView
android:id="@+id/listView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/EditText01"
android:cacheColorHint="#00000000"
android:textColor="#000000"
android:textSize="15sp" />
我的布局自定义列表视图
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/txtNombre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="10dp"
android:paddingLeft="10dp"
android:text="TextView" />
<TextView
android:id="@+id/txtTicket"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/txtNombre"
android:paddingLeft="10dp"
android:text="TextView" />
<TextView
android:id="@+id/txtOrden"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/txtTicket"
android:paddingLeft="10dp"
android:text="" />
<TextView
android:id="@+id/txtAsiento"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/txtOrden"
android:paddingLeft="10dp"
android:visibility="gone"
android:text="" />
<TextView
android:id="@+id/txtNumero"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/txtAsiento"
android:paddingLeft="10dp"
android:visibility="gone"
android:text="" />
<TextView
android:id="@+id/txtAdicionales"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/txtNumero"
android:paddingLeft="10dp"
android:visibility="gone"
android:text="" />
<TextView
android:id="@+id/txtOtros"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/txtAdicionales"
android:paddingLeft="10dp"
android:visibility="gone"
android:text="" />
<TextView
android:id="@+id/txtCategoria"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/txtOtros"
android:paddingLeft="10dp"
android:visibility="gone"
android:text="" />
<Button
android:id="@+id/button1"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/txtOrden"
android:layout_alignParentRight="true"
android:layout_marginRight="23dp"
android:background="@drawable/btn_green_small"
android:maxHeight="48dp"
android:maxWidth="80dp"
android:shadowColor="#A8A8A8"
android:text="Validar"
android:textColor="#FFFFFF" />
<TextView
android:id="@+id/txtMensaje"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/button1"
android:text="SDSDSDS"
android:layout_marginRight="18dp"
android:visibility="gone"
android:textSize="10dp" />
</RelativeLayout>
列表视图的任何元素都会发生这种情况。
【问题讨论】:
-
您能否在填充视图后确认您的任务正在运行。似乎在屏幕上没有任何内容之前任务正在执行
-
任务如果运行,但屏幕上什么都没有?当我按下一个按钮时运行的异步操作,因此列表视图加载了数据。 @Ata
-
我的意思是任务应该在活动 onCreate 方法执行后运行。看看是否正在发生这种情况。简单的日志记录会告诉您首先发生了什么。
-
我发现了部分错误,listView.getChildAt(i) 返回最后N个值并返回为null,我正在找出原因并评论。
-
要使此方法起作用,您需要在异步任务之前和之后拥有完全相同数量的项目