我知道有很多很多问题,比如我要提出的问题,然而,没有一个问题可以给我一个解决方案。我在这里阅读了博客和问题,但没有运气。我在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)
我正在实施方法getItemViewType
和getViewTypeCount()
。我已经实施了着名的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>
答案 0 :(得分:2)
只有两个原因可以解决错误
1)在其中一个布局文件(item_no_picture_list
或item_picture_list
)中,没有ID为titleArticle
的儿童
2)索引index
的arrayList新闻中的项目为空
检查无论哪种情况..您可以使用日志..将以下代码写在导致错误的行上方。
if(item == null)
Log.i("WhoIsNull", "item");
if(titleView == null)
Log.i("WhoIsNull", "titleView");