【问题标题】:Set Image Resource on ListView Adapter [duplicate]在 ListView 适配器上设置图像资源 [重复]
【发布时间】:2018-03-06 08:55:31
【问题描述】:

我有一个这样的适配器

if(modelSalesAct.getStatus().equals("2"))
    {
        viewHolder.ivStatus.setImageResource(R.drawable.ic_black);
    }
    else
    if(modelSalesAct.getStatus().equals("3")||modelSalesAct.getStatus().equals("4"))
    {
        viewHolder.ivStatus.setImageResource(R.drawable.ic_yellow);
    }
    else
    if(modelSalesAct.getStatus().equals("5"))
    {
        viewHolder.ivStatus.setImageResource(R.drawable.ic_red);
    }

这是设置不同的图像匹配条件状态。但我收到这样的错误消息

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.ImageView.setImageResource(int)” 在 com.kreators.nvmobile.dashboard.AdapterSalesAct.getView(AdapterSalesAct.java:133)

错误停止在线我从我的drawable 中设置了图像资源。为什么会这样?我不知道会发生什么。谁能帮帮我?

仅供参考,这是我的 ViewAdapter

        ViewHolder viewHolder; // view lookup cache stored in tag

    final View result;

    if (convertView == null) {

        viewHolder = new ViewHolder();
        LayoutInflater inflater = LayoutInflater.from(getContext());
        convertView = inflater.inflate(R.layout.row_sales_act, parent,
                false);
        viewHolder.ivHeader = (ImageView)
                convertView.findViewById(R.id.ivHeader);
        viewHolder.txtCUSTID = (TextView)
                convertView.findViewById(R.id.ADAPTERCUSTID);
        viewHolder.txtSalesName = (TextView)
                convertView.findViewById(R.id.ADAPTERSALESNAME);
        viewHolder.txtSales = (TextView)
                convertView.findViewById(R.id.ADAPTERSALES);
        viewHolder.txtChannel = (TextView)
                convertView.findViewById(R.id.tvCustomer);
        viewHolder.ivStatus = (ImageView)
                convertView.findViewById(R.id.ivStatus);
        viewHolder.txtTarget = (TextView)
                convertView.findViewById(R.id.tvTarget);
        viewHolder.txtSI = (TextView)
                convertView.findViewById(R.id.tvSI);
        viewHolder.txtPercentPSI = (TextView)
                convertView.findViewById(R.id.tvPercentPSI);
        viewHolder.txtPercentSI = (TextView)
                convertView.findViewById(R.id.tvPercentSI);
        viewHolder.txtSO = (TextView)
                convertView.findViewById(R.id.tvSO);
        viewHolder.txtAR = (TextView)
                convertView.findViewById(R.id.tvAR);

        result=convertView;
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
        result=convertView;
    }

    viewHolder.txtCUSTID.setText(modelSalesAct.getCUSTID());
    viewHolder.txtSalesName.setText(modelSalesAct.getSALESNAME());
    viewHolder.txtSales.setText(modelSalesAct.getSALES());
    viewHolder.txtChannel.setText(modelSalesAct.getChannel());

    if(modelSalesAct.getStatus().equals("2"))
    {
        viewHolder.ivStatus.setImageResource(R.drawable.ic_black);
    }
    else
    if(modelSalesAct.getStatus().equals("3")||modelSalesAct.getStatus().equals("4"))
    {
        viewHolder.ivStatus.setImageResource(R.drawable.ic_yellow);
    }
    else
    if(modelSalesAct.getStatus().equals("5"))
    {
        viewHolder.ivStatus.setImageResource(R.drawable.ic_red);
    }
    viewHolder.txtTarget.setText(modelSalesAct.getTarget());
    viewHolder.txtSI.setText(modelSalesAct.getSI());
    viewHolder.txtPercentSI.setText(modelSalesAct.getPercentSI());
    viewHolder.txtPercentPSI.setText(modelSalesAct.getPercentPSI());
    viewHolder.txtSO.setText(modelSalesAct.getSO());
    viewHolder.txtAR.setText(modelSalesAct.getAR());

    return convertView;

【问题讨论】:

  • 发布您的完整适配器代码

标签: java android listview android-adapter


【解决方案1】:

在你的ViewAdapter

ImageView ivStatus = (ImageView)convertView.findViewById(R.id.ivStatus);

if(modelSalesAct.getStatus().equals("2"))
    {
        ivStatus.setImageResource(context.getResources().getDrawable(R.drawable.ic_black));
    }

【讨论】:

    【解决方案2】:

    检查row_sales_act.xmlImageview是否有idivStatus,问题是当你试图找到一个在你正在查看的地方没有找到id的视图时,它会返回@987654324 @。

    【讨论】:

      【解决方案3】:

      您无法在此行中找到 ivHeader 的 ID。

      viewHolder.ivHeader = (ImageView)
                      convertView.findViewById(R.id.ivHeader);
      

      因此你得到空指针异常。
      放置一个调试器并确保ivHeader 是否存在于您的row_sales_act.xml 布局文件中

      【讨论】:

        猜你喜欢
        • 2020-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-22
        • 2019-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多