【问题标题】:failed find element in listview custom adapter在 listview 自定义适配器中查找元素失败
【发布时间】: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,我正在找出原因并评论。
  • 要使此方法起作用,您需要在异步任务之前和之后拥有完全相同数量的项目

标签: android listview


【解决方案1】:

您需要移动获取列表项视图的代码并将布局参数设置为适配器中的getView

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

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

【讨论】:

  • 好的!getView 改变了这个事件,一切都很好!谢谢你的信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多