android - 由于 View Holder,Adapter 出现空指针异常

标签 android listview adapter

这是我的适配器:

public class MainAdapter extends BaseAdapter implements View.OnClickListener {
private Context context;
private LayoutInflater inflater;
private Map<Integer, Info[]> originalDatas;

public MainAdapter(Context context, Map<Integer, Info[]> infoList) {
    this.context = context;
    originalDatas = infoList;
    inflater = LayoutInflater.from(context);
}

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

@Override
public Object getItem(int position) {
    return originalDatas.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    convertView = inflater.inflate(R.layout.grid_list_row, null);
    final ViewHolder viewHolder;

    if (convertView == null) {

        viewHolder = new ViewHolder();

        viewHolder.rightText = (TextView) convertView.findViewById(R.id.rightText);
        viewHolder.leftText = (TextView) convertView.findViewById(R.id.leftText);
        viewHolder.centerText = (TextView) convertView.findViewById(R.id.centerText);

        viewHolder.rightText.setTypeface(TypeFaces.getTypeFace(context, TypeFaces.FONT_REGULAR));
        viewHolder.leftText.setTypeface(TypeFaces.getTypeFace(context, TypeFaces.FONT_REGULAR));
        viewHolder.centerText.setTypeface(TypeFaces.getTypeFace(context, TypeFaces.FONT_REGULAR));

        viewHolder.rightText.setOnClickListener(this);
        viewHolder.centerText.setOnClickListener(this);
        viewHolder.leftText.setOnClickListener(this);

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

    Iterator<Integer> iterator = originalDatas.keySet().iterator();
    while (iterator.hasNext()) {
        Info[] infos = originalDatas.get(iterator.next());
        viewHolder.rightText.setText(infos[0].getTitle());
        viewHolder.centerText.setText(infos[1].getTitle());
        if (infos[2] != null)
            viewHolder.leftText.setText(infos[2].getTitle());
        else
            viewHolder.leftText.setVisibility(View.INVISIBLE);
    }

    return convertView;
}

@Override
public void onClick(View v) {
    String titleText = ((TextView) v).getText().toString();
    if (titleText != "") {
        Intent intent = new Intent(context, SecondActivity.class);
        intent.putExtra("parent", titleText);
        Toast.makeText(context, titleText, Toast.LENGTH_SHORT).show();
        context.startActivity(intent);
    }
}


static class ViewHolder {
    TextView rightText;
    TextView centerText;
    TextView leftText;
}
}

它在

上给了我一个 nullpioterexception
viewHolder.rightText.setText(infos[0].getTitle());

为什么会出现问题?

我也用过这个:

while (iterator.hasNext() && viewHolder!=null) {
        Info[] infos = originalDatas.get(iterator.next());
        viewHolder.rightText.setText(infos[0].getTitle());
        viewHolder.centerText.setText(infos[1].getTitle());
        if (infos[2] != null)
            viewHolder.leftText.setText(infos[2].getTitle());
        else
            viewHolder.leftText.setVisibility(View.INVISIBLE);
    }

但所有行都由第一行数据填充,当我选择 TextView 时它不起作用

最佳答案

    convertView = inflater.inflate(R.layout.grid_list_row, null);
    final ViewHolder viewHolder;   
    if (convertView == null) {

convertView 在您的代码中永远不会为 null,并且永远不会初始化 ViewHolder。改成这样

    final ViewHolder viewHolder   
    if (convertView == null) {
          convertView = inflater.inflate(R.layout.grid_list_row, null);

关于android - 由于 View Holder,Adapter 出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26264422/

相关文章:

android - 如何操作 listview 以便特定电话号码始终显示在顶部?

android - 将应用程序传递给 AndroidViewModel

android - 查找特定的正则表达式单词并链接以在 android 中打开一个 Activity

java - 应用程序 IncomingHandler 有时收不到服务消息

.net - ListView.ItemCollection.Contains() 如何工作?

android - 具有多个 ListView 的 SwipeRefreshLayout

android - 使用动态加载的图像滚动 ListView 会混合图像顺序

ajax - JQM (jQueryMobile) AJAX 内容 ListView ('refresh' 的问题)无法正常工作

android - CustomListViewAdapter 中未调用 getView()

java - 使用另一个 Activity 调用 xml 元素(android)