listview自定义适配器中的find元素失败

时间:2016-02-23 15:51:31

标签: android listview

我为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>

列表视图中的任何元素都会发生这种情况。

1 个答案:

答案 0 :(得分:1)

您需要移动列表项视图的代码并将layoutparams设置为适配器中的getView

public View getView(int position, View convertView, ViewGroup parent)

看看这个tutorial,现在我建议你看看recyclerview