当在其他数组适配器中实例化数组适配器时,我得到了空

时间:2016-06-22 17:18:45

标签: android arrays arraylist android-arrayadapter notifydatasetchanged

我需要将 ListAdapterA onClick方法中的列表项添加到 DoneListAdapter ,所以我需要在 ListAdapterA DoneListAdapter >调用方法添加添加列表项和notifyDataSetChanged()但 DoneListAdapter 返回null并且我的应用程序崩溃,为什么它返回null?

public class ListAdapterA extends ArrayAdapter<Abc> {

private Context context;
private String testString = "a";
DoneListAdapter doneListAdapter;
List<Abc> abc;
List<DoneAbc> doneAbc;


public ListAdapter(Context context, List<Abc> cbA) {
    super(context, R.layout.list_item, cbA);
    this.context = context;
    this.abc = cbA;
    doneListAdapter = new DoneListAdapter(context,doneAbc);
    doneActionHandler = new DoneActionHandler(context);
    actionHandler = new ActionHandler(context);
}

private class ViewHolder {
    ImageButton abcDoneBtn;
}

@Override
public Abc getItem(int position) {
    return abc.get(position);
}

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

@Override
public int getViewTypeCount() {
    return 2;
}

@Override
public int getItemViewType(int position) {

    return (testString == "a") ? 0:1;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    int type = getItemViewType(position);

    if (convertView == null) {

        if (type == 0){
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.list_item_finished, null);
        }else {
            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.list_item, null);
        }

        holder = new ViewHolder();

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

    if (type == 0){

    holder.abcDoneBtn= (ImageButton)convertView.findViewById(R.id.finished_abc);
        holder.abcDoneBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Abc abc = (Abc) getItem(position);


        DoneABC doneabc = new DoneAC();
                DoneABC.setId(abc.getId());
                doneabc.setName(abc.getName());

                doneActionHandler.save(doneabc);

                doneListAdapter.add(doneabc);
                remove(abc);
                actionHandler.delete(abc);
                notifyDataSetChanged();
                doneListAdapter.notifyDataSetChanged();

            }
        }); 
    }
    return convertView;
}

@Override
public void add(Abc abc) {
    dreams.add(abc);
    notifyDataSetChanged();
    super.add(abc);
}

@Override
public void remove(Abc abc) {
    dreams.remove(abc);
    notifyDataSetChanged();
    super.remove(abc);
}

}

DoneAdapter:

public class DoneListAdapter extends ArrayAdapter<DoneAbc> {

private Context context;
List<DoneAbc> adoneAbc;


public DoneListAdapter(Context context, List<DoneAbc> doneAbc) {
    super(context, R.layout.list_item, doneAbc);
    this.context = context;
    this.adoneAbc = doneAbc;
}

private class ViewHolder {

}

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

@Override
public DoneAbc getItem(int position) {
    return adoneAbc.get(position);
}

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


@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    int type = getItemViewType(position);

    if (convertView == null) {

            LayoutInflater inflater = (LayoutInflater) context
                    .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.list_item, null);


        holder = new ViewHolder();

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

    return convertView;
}

@Override
public void add(DoneAbc doneAbc) {
    adoneAbc.add(doneAbc);
    notifyDataSetChanged();
    super.add(doneAbc);
}

@Override
public void remove(DoneAbc doneAbc) {
    adoneAbc.remove(doneAbc);
    notifyDataSetChanged();
    super.remove(doneAbc);
}
}
  

致命的例外:主要                                                                                过程:com.teamkosas.cloudv05,PID:30693                                                                                java.lang.NullPointerException:尝试调用接口方法&#39; boolean java.util.List.add(java.lang.Object)&#39;在null对象引用上                                                                                    在com.teamkosas.cloudv05.adapters.DoneListAdapter.add(DoneListAdapter.java:123)                                                                                    在com.teamkosas.cloudv05.adapters.ListAdapterA $ 1.onClick(ListAdapterA.java:152)                                                                                    在android.view.View.performClick(View.java:5697)                                                                                    在android.view.View $ PerformClick.run(View.java:22526)                                                                                    在android.os.Handler.handleCallback(Handler.java:739)                                                                                    在android.os.Handler.dispatchMessage(Handler.java:95)                                                                                    在android.os.Looper.loop(Looper.java:158)                                                                                    在android.app.ActivityThread.main(ActivityThread.java:7224)                                                                                    at java.lang.reflect.Method.invoke(Native Method)                                                                                    在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1230)                                                                                    在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

1 个答案:

答案 0 :(得分:0)

您正在DoneListAdapter构造函数中传递空列表。

在您的班级ListAdapterA中替换此行:

doneListAdapter = new DoneListAdapter(context,doneAbc);

有了这个:

doneListAdapter = new DoneListAdapter(context,new ArrayList<DoneAbc>())