0

を得ている他のアレイアダプタに配列アダプタをインスタンス化するときに、私は追加するメソッドの追加を呼び出すためにListAdapterADoneListAdapterをインスタンス化する必要がありますリスト項目とnotifyDataSetChanged()しかしDoneListAdapterはnullを返し、私のアプリケーションがクラッシュし、なぜnullを返しますか?私は<strong>ListAdapterA</strong>のonClickメソッドから<strong>DoneListAdapter</strong>にリスト項目を追加する必要があり、私はヌル

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が:インタフェースメソッドを呼び出す試み「ブールjava.util.List.add(java.lang.Object) 'nullのオブジェクト参照で com.teamkosas.cloudv05.adapters.DoneListAdapter.add(DoneListAdapter.java: 123) com.teamkosas.cloudv05.adapters.ListAdapterA $ 1.onClick(ListAdapterA.java:152) at android.view.View.performClick(View.java:5697) android.view.View $ PerformClick.run (View.java:22526) (アンドロイド.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper .java:158) android.app.ActivityThread.main(ActivityThread.java:7224) at java.lang.reflect.Method.invoke(ネイティブメソッド) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller。実行する(ZygoteInit.java :com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)にて1230)

+0

コンストラクタをnullを返すことはありません。あなたがNullPointerExceptionを取得した場合は、スタックトレースを投稿してください –

+0

完全なコードとスタックトレースを追加しました – kosas

+0

'adreams'変数が定義されていない場合、それを' adoneAbc'に置き換えてください。 –

答えて

0

あなたがDoneListAdapterコンストラクタでヌルリストを渡しています。あなたのクラスで

ListAdapterAは、この行を置き換えます。これにより

doneListAdapter = new DoneListAdapter(context,doneAbc); 

doneListAdapter = new DoneListAdapter(context,new ArrayList<DoneAbc>()) 
関連する問題