I need to add list item from ListAdapterA onClick method to DoneListAdapter so I need to instantiate DoneListAdapter in ListAdapterA to call method add that adds list item and notifyDataSetChanged() but DoneListAdapter returns null and my app crashes, why it returns 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);
}
}
FATAL EXCEPTION: main Process: com.teamkosas.cloudv05, PID: 30693 java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.add(java.lang.Object)' on a null object reference at com.teamkosas.cloudv05.adapters.DoneListAdapter.add(DoneListAdapter.java:123) at com.teamkosas.cloudv05.adapters.ListAdapterA$1.onClick(ListAdapterA.java:152) at android.view.View.performClick(View.java:5697) at android.view.View$PerformClick.run(View.java:22526) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7224) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Your are passing a null list in DoneListAdapter
constructor.
In your class ListAdapterA
replace this line:
doneListAdapter = new DoneListAdapter(context,doneAbc);
With this:
doneListAdapter = new DoneListAdapter(context,new ArrayList<DoneAbc>())