在ListView中的getView中具有多个视图的NullPointerException

时间:2014-05-16 19:31:50

标签: android listview nullpointerexception

我知道有很多很多问题,比如我要提出的问题,然而,没有一个问题可以给我一个解决方案。我在这里阅读了博客和问题,但没有运气。我在Android中有一个ListView,我想用两种类型的视图/布局显示一些新闻:一个用于有图片的新闻,另一个用于没有的新闻(只有文字),所以应用可以显示类似this的内容。但每次我运行我的应用程序时都会收到错误:

E/AndroidRuntime(3973): FATAL EXCEPTION: main
E/AndroidRuntime(3973): Process: com.example.test23, PID: 3973
E/AndroidRuntime(3973): java.lang.NullPointerException
E/AndroidRuntime(3973): at com.example.test23.ItemAdapter.getView(ItemAdapter.java:80)
E/AndroidRuntime(3973): at android.widget.AbsListView.obtainView(AbsListView.java:2263)
E/AndroidRuntime(3973): at android.widget.ListView.measureHeightOfChildren(ListView.java:1263)

我正在实施方法getItemViewTypegetViewTypeCount()。我已经实施了着名的ViewHolder,但也没有运气。现在这是Adapter类(因为我已经很多次改变了它):

public class ItemAdapter extends BaseAdapter implements OnItemClickListener {
    Item item = null;
    private ArrayList<Item> news = new ArrayList<Item>();
    private static final int NO_PICTURE_VIEW = 0;
    private static final int PICTURE_VIEW = 1;

    public ItemAdapter(Context context, ArrayList<Item> items) {
        super();
        news.addAll(items);
    }

    @Override
    public int getCount() {
        return news.size();

    }

    @Override
    public Item getItem(int index) {
        return getItem(index);
    }

    @Override
    public long getItemId(int index) {
        return index;
    }

    public int getViewTypeCount() {
        return 2;
    }

    public int getItemViewType(int position) {
        Item article = news.get(position);
        if (article.getImageUrl() != null && !article.getImageUrl().equals("")
                && article.getImageUrl().indexOf("no_pic.png") == -1)
            // if there's no pic ?
            // TYPE_SEPARATOR
            // :
                                                            // TYPE_ITEM;
            return NO_PICTURE_VIEW;
        else
            return PICTURE_VIEW;
    }

    @Override
    public View getView(int index, View view, ViewGroup parent) {
        item = news.get(index);
        int type = getItemViewType(index);
        int resource;
        if (type == NO_PICTURE_VIEW) {
            resource = R.layout.item_no_picture_list;
        } else {
            resource = R.layout.item_picture_list;
        }
        if (view == null) {
            LayoutInflater inflater = LayoutInflater.from(parent.getContext());
            view = inflater.inflate(resource, parent, false);
            TextView titleView = (TextView) view
                    .findViewById(R.id.titleArticle);
            titleView.setText(item.getTitle());// this is the line that gives me
                                                // the nullpointerexception
        }

        return view;
    }

    @Override
    public void onItemClick(...) {
    }
}

两种观点的布局都还可以,我已经对它们进行了测试,没有问题。我不想像分隔符一样,就像我在其他博客上看到的那样,我只是希望能够显示同一类型信息的两个视图,这是一个数组。如果您需要更多信息或更多代码,请告诉我们。任何帮助或信息表示赞赏。提前致谢。

更新这里是两个布局,对于新的图片:     

 <ImageView
    android:id="@+id/imageItem"
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:adjustViewBounds="true"
    android:scaleType="fitXY"
    android:contentDescription="Descripción del contenido de la imagen"
    android:src="@drawable/rr_logo"/>
   <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical" >
         <TextView 
            android:id="@+id/titleArticle"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center_vertical"
            android:textStyle="bold"
            android:textSize="18sp"
            android:textColor="#000000"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="5dp"/>
    </LinearLayout>
 </LinearLayout>

对于没有图片的新闻:

   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:id="@+id/itemNoPicture" >
     <TextView 
        android:id="@+id/titleNoPicture"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="18dp"/>
</LinearLayout>

1 个答案:

答案 0 :(得分:2)

只有两个原因可以解决错误

1)在其中一个布局文件(item_no_picture_listitem_picture_list)中,没有ID为titleArticle的儿童

2)索引index的arrayList新闻中的项目为空

检查无论哪种情况..您可以使用日志..将以下代码写在导致错误的行上方。

if(item == null)
    Log.i("WhoIsNull", "item");
if(titleView == null)
    Log.i("WhoIsNull", "titleView");