Java 多列表视图android

Java 多列表视图android,java,android,adapter,Java,Android,Adapter,我尝试创建multi-ListView,但我有java.lang.NullPointerException。看起来还不错 主要内容: 这是电话线 convertView.setTag(支架)将支架移到顶部。我认为它会起作用。在我看来,你也必须使用else语句 @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertV

我尝试创建multi-ListView,但我有
java.lang.NullPointerException
。看起来还不错

主要内容:

这是电话线
convertView.setTag(支架)

将支架移到顶部。我认为它会起作用。在我看来,你也必须使用else语句

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if(convertView == null) {
                holder = new ViewHolder();
                Log.d("object.get(position) = ", object.get(position));
                if(object.get(position).equals("0")) {
                    convertView = vi.inflate(R.layout.p_activity_detected, null);
                    holder.textActivity = (TextView) convertView.findViewById(R.id.detected_text);
                }
                else if(object.get(position).equals("1")) {
                    convertView = vi.inflate(R.layout.p_activity_people, null);
                    holder.textPeople = (TextView) convertView.findViewById(R.id.people_text);
                }
                else{
                    //set defualt holder.textPeople here
                }


                convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    //set text
    if(object.get(position).getType().equals("0")) {
        holder.textActivity.setText(object.get(position).getTitle());
    }

    if(object.get(position).getType().equals("1")) {
        holder.textPeople.setText(object.get(position).getTitle());
    }

    return convertView;
}

用这些代码替换您的适配器

public class ActivityAdapter extends ArrayAdapter {

private Context context;
private ArrayList<ActivityObject> object;
LayoutInflater vi;

ViewHolder holder;

public ActivityAdapter(Context context, ArrayList<ActivityObject> object) {
    super(context, 0, object);

    this.context = context;
    this.object = object;

    vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    holder = new ViewHolder();;

    if(convertView == null) {

        if(object.get(position).equals("0")) {
            convertView = vi.inflate(R.layout.p_activity_detected, null);
            holder.textActivity = (TextView) convertView.findViewById(R.id.detected_text);
        }

        if(object.get(position).equals("1")) {
            convertView = vi.inflate(R.layout.p_activity_people, null);
            holder.textPeople = (TextView) convertView.findViewById(R.id.people_text);
        }


        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    //set text
    if(object.get(position).getType().equals("0")) {
        holder.textActivity.setText(object.get(position).getTitle());
    }

    if(object.get(position).getType().equals("1")) {
        holder.textPeople.setText(object.get(position).getTitle());
    }

    return convertView;
}

static class ViewHolder {
    public TextView textActivity;
    public TextView textPeople;
    }
   }
公共类ActivityAdapter扩展了ArrayAdapter{
私人语境;
私有数组列表对象;
拉平机vi;
视窗座;
公共活动适配器(上下文,ArrayList对象){
超级(上下文,0,对象);
this.context=上下文;
this.object=对象;
vi=(LayoutInflater)context.getSystemService(context.LAYOUT\u充气机\u服务);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
holder=新的ViewHolder();;
if(convertView==null){
if(object.get(position).equals(“0”)){
convertView=vi.充气(检测到R.layout.p_活动,空);
holder.textActivity=(TextView)convertView.findViewById(R.id.detected\u text);
}
if(object.get(position).equals(“1”)){
convertView=vi.充气(R.layout.p_活动_人,空);
holder.textPeople=(TextView)convertView.findViewById(R.id.people\u text);
}
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
//设置文本
if(object.get(position.getType().equals(“0”)){
holder.textActivity.setText(object.get(position.getTitle());
}
if(object.get(position.getType().equals(“1”)){
holder.textPeople.setText(object.get(position.getTitle());
}
返回视图;
}
静态类视窗夹{
公共文本查看文本活动;
公共文本查看文本人;
}
}

您的代码不能保证convertView不会为空:

  if(convertView == null) {

        if(object.get(position).equals("0")) {
            convertView = vi.inflate(R.layout.p_activity_detected, null);
            holder.textActivity = (TextView) convertView.findViewById(R.id.detected_text);
        }

        if(object.get(position).equals("1")) {
            convertView = vi.inflate(R.layout.p_activity_people, null);
            holder.textPeople = (TextView) convertView.findViewById(R.id.people_text);
        }

        holder = new ViewHolder();
        convertView.setTag(holder);
如果上述条件均不成立,则convertView仍将为null。 你确定条件正是你想要做的吗? 根据你的声明

private ArrayList<ActivityObject> object;

也许您想将它们强制转换到ActivityObject中,并将类型中的字段与字符串进行比较?

谢谢您的回答,但这不起作用。我在这行
convertView.setTag(holder)中有错误现在看。converView为空时会出现此错误。可能是object.get(position)它不等于“0”或“1”,那么您的转换视图为空,因为您不需要;不要使用else语句。请调试它。谢谢,它必须像这样做
对象。get(position).getType().equals(“1”)
及其工作)我复制此代码并在适配器中通过。但是我有一些错误
致命的异常:在
convertView.setTag(holder)行中的主java.lang.NullPointerException
谢谢,它必须这样做
对象.get(position).getType().equals(“1”)
及其工作)Aaaaaa。。。谢谢,你说得对。我需要
object.get(position.getType().equals(“1”)
。愚蠢的,愚蠢的错误
public class ActivityAdapter extends ArrayAdapter {

private Context context;
private ArrayList<ActivityObject> object;
LayoutInflater vi;

ViewHolder holder;

public ActivityAdapter(Context context, ArrayList<ActivityObject> object) {
    super(context, 0, object);

    this.context = context;
    this.object = object;

    vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    holder = new ViewHolder();;

    if(convertView == null) {

        if(object.get(position).equals("0")) {
            convertView = vi.inflate(R.layout.p_activity_detected, null);
            holder.textActivity = (TextView) convertView.findViewById(R.id.detected_text);
        }

        if(object.get(position).equals("1")) {
            convertView = vi.inflate(R.layout.p_activity_people, null);
            holder.textPeople = (TextView) convertView.findViewById(R.id.people_text);
        }


        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    //set text
    if(object.get(position).getType().equals("0")) {
        holder.textActivity.setText(object.get(position).getTitle());
    }

    if(object.get(position).getType().equals("1")) {
        holder.textPeople.setText(object.get(position).getTitle());
    }

    return convertView;
}

static class ViewHolder {
    public TextView textActivity;
    public TextView textPeople;
    }
   }
  if(convertView == null) {

        if(object.get(position).equals("0")) {
            convertView = vi.inflate(R.layout.p_activity_detected, null);
            holder.textActivity = (TextView) convertView.findViewById(R.id.detected_text);
        }

        if(object.get(position).equals("1")) {
            convertView = vi.inflate(R.layout.p_activity_people, null);
            holder.textPeople = (TextView) convertView.findViewById(R.id.people_text);
        }

        holder = new ViewHolder();
        convertView.setTag(holder);
private ArrayList<ActivityObject> object;
object.get(position).equals("0"))
...
object.get(position).equals("1"))