Android中的字符串到textview不像以前在自定义适配器中那样显示

时间:2016-03-01 10:19:18

标签: java android android-studio

我使用的是我在其他应用中使用的相同自定义适配器格式。我只更改了字符串引用,但运行应用程序时出现以下错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

我一直试图将我的大脑包裹起来,但我无法弄清楚问题是什么。一切都与其他应用程序完全相同,但由于某种原因在这个应用程序中不起作用。一切都完全一样。唯一的区别是数据库表是从中抽取数据的。这是产生错误的getView:

public class Holder
{
    TextView title;
    TextView description;
    NetworkImageView img;
    RatingBar rating;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    Holder holder=new Holder();
    View rowView;
    rowView = inflater.inflate(R.layout.product_row, null);
    holder.title=(TextView) rowView.findViewById(R.id.productName);
    holder.img=(NetworkImageView) rowView.findViewById(R.id.productPic);
    holder.rating=(RatingBar)rowView.findViewById(R.id.ratingBar2);
    holder.title.setText(result.get(position).getName());
    holder.rating.setRating(Float.valueOf(result.get(position).getRating().toString()));

    // If you are using NetworkImageView
    holder.img.setImageUrl(result.get(position).getImageURL(), VolleyController.getInstance().getImageLoader());

    return rowView;
}

我的行数据/模型也完全相同。给出错误的行是:

holder.title.setText(result.get(position).getName());

在我的RowData模型中,getName是这样的:

public String getName(){
    return name;

3 个答案:

答案 0 :(得分:1)

使用这些代码行替换您的代码。在您的代码中,您没有使用View convertView getView() BaseAdapter方法代替View方法,而是使用自己的getView() rowView ,因此,您正面临这些问题。因此,请使用adapter@Override public View getView(final int position, View convertView, ViewGroup parent) { Holder holder=new Holder(); if (convertView == null) { convertView = inflater.inflate(R.layout.product_row, null); holder.title=(TextView) convertView.findViewById(R.id.productName); holder.img=(NetworkImageView) convertView.findViewById(R.id.productPic); holder.rating=(RatingBar)convertView.findViewById(R.id.ratingBar2); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.title.setText(result.get(position).getName()); holder.rating.setRating(Float.valueOf(result.get(position).getRating().toString())); // If you are using NetworkImageView holder.img.setImageUrl(result.get(position).getImageURL(), VolleyController.getInstance().getImageLoader()); return convertView; } 方法的视图

var myModule = app.__get__('this_module');
var spy      = sinon.spy(myModule, 'set_this_foo');

myModule.set_this_foo();

expect(spy).to.have.returned({ boo : 'something' });

答案 1 :(得分:1)

首先,我问你为什么使用View Holder的问题。因为它是view Holder的错误/错误实现。请阅读此博客,它将帮助您了解view holder模式 https://www.codeofaninja.com/2013/09/android-viewholder-pattern-example.html

请在 product_row.xml中查看TextView的ID。我认为它只是TestView的拼写错误ID。

答案 2 :(得分:0)

使用View中的getView()引用,不要创建单独的View

使用

 `holder.title=(TextView) convertView.findViewById(R.id.productName);`

它可以解决问题