2016-04-09 10 views
0

私は、クラスTabFragment1にArrayListを持っています。私はインストールされたアプリのリストのためのアダプタを持っています。そして、ImageViewアプリケーション名をクリックすると、アイコンがTabFragment1 ArrayListに移動するはずですが、解決できません。 ivをクリックするとアプリケーションがクラッシュするアダプタからのArrayListへの追加android

AppAdapter

public class AppAdapter extends BaseAdapter{ 
    private List<ApplicationInfo> packages; 
    private LayoutInflater inflater; 
    private PackageManager pm; 

    public AppAdapter(Context context, PackageManager pm, List<ApplicationInfo> packages) { 
     this.packages = packages; 
     this.pm = pm; 

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


    @Override 
    public int getCount() { 

     return packages.size(); 
    } 

    @Override 
    public ApplicationInfo getItem(int p1) { 

     return packages.get(p1); 
    } 

    @Override 
    public long getItemId(int p1) { 

     return p1; 
    } 

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

     View view = null; 
     final ViewHolder viewHolder; 
     final TabFragment1 tab1; 

     if (v == null) { 
      viewHolder = new ViewHolder(); 
      view = inflater.inflate(R.layout.list_item, parent, false); 
      viewHolder.tvAppLabel = (TextView) view 
        .findViewById(R.id.app_item_text); 
      viewHolder.ivAppIcon = (ImageView) view 
        .findViewById(R.id.app_item_image); 
      viewHolder.ivAppAdd = (ImageView) view 
        .findViewById(R.id.add); 
      view.setTag(viewHolder); 
     } else { 
      view = v; 
      viewHolder = (ViewHolder) view.getTag(); 
     } 

     ApplicationInfo app = packages.get(position); 
     tab1= new TabFragment1(); 

     viewHolder.tvAppLabel.setText(app.loadLabel(pm).toString()); 
     viewHolder.ivAppIcon.setImageDrawable(app.loadIcon(pm)); 
     viewHolder.ivAppAdd.setImageResource(R.drawable.ic_add_circle_outline_black_48dp); 
     viewHolder.ivAppAdd.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       tab1.data.add(new AddedApps(viewHolder.ivAppIcon.getId(), 
viewHolder.tvAppLabel.getText().toString())); //trouble is here 
      } 
     }); 



     return view; 
    } 


    static class ViewHolder { 
     private TextView tvAppLabel; 
     private ImageView ivAppIcon; 
     private ImageView ivAppAdd; 
    } 

} 

TabFragment1

public class TabFragment1 extends Fragment { 
    private RecyclerView rv; 
    private FloatingActionButton fab; 
    private Fragment installedApps; 
    private FragmentTransaction transaction; 
    private RecyclerView.LayoutManager layoutManager; 
    private RecyclerView.Adapter adapter; 
    public List<AddedApps> data; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.tab_fragment1, container, false); 

     rv=(RecyclerView) view.findViewById(R.id.recyclerView); 
     fab=(FloatingActionButton) view.findViewById(R.id.fabBtn); 
     installedApps = new InstalledApps(); 

     data=new ArrayList<AddedApps>(); 
     data.add(new AddedApps(R.mipmap.ic_launcher,"Application")); 



     layoutManager = new LinearLayoutManager(getContext()); 
     rv.setLayoutManager(layoutManager); 
     adapter = new AddedAppsAdapter(data); 
     rv.setAdapter(adapter); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       transaction = getFragmentManager().beginTransaction(); 

       transaction.replace(R.id.container, installedApps); 
       transaction.addToBackStack(null); 

       transaction 
         .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) 
         .commit(); 

    } 
}); 



     return view; 
    } 


} 

AddedApps

public class AddedApps { 
    private int icon; 
    private String name; 

    public AddedApps(int icon, String name) { 
     this.icon = icon; 
     this.name = name; 
    } 

    public int getIcon() { 
     return icon; 
    } 

    public String getName() { 
     return name; 
    } 
} 

crashlog:あなたはRecyclerView.Adapter <を使用>とあなたの活動に戻ってクリックコールを取得するためのインタフェースを使用する必要がありますリサイクラービュー

java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.add(java.lang.Object)' on a null object reference 
     at com.kostya.newconcept.adapters.AppAdapter$1.onClick(AppAdapter.java:84) 
     at android.view.View.performClick(View.java:5204) 
     at android.view.View$PerformClick.run(View.java:21153) 
     at android.os.Handler.handleCallback(Handler.java:739) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:148) 
     at android.app.ActivityThread.main(ActivityThread.java:5417) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

答えて

1

あなたTabFragment1クラスが初期化されません。コンストラクタのメンバの1つ:public List<AddedApps> data。したがって、tab1.data.add(...)を実行しようとすると、onCreateView()がまだ呼び出されておらず、dataがまだnullであるため、null参照をヒットします。

TabFragment1クラスのコンストラクタをオーバーライドし、そのメンバをそこで初期化します。 Fragmentクラスが正常に動作するように、superコンストラクタを呼び出すことを忘れないでください。

0

+0

私は2つのアダプターを持っています.1つはリサイクラー・ビュー用、もう1つはリスト・ビュー用です。私はちょうどlistViewアダプタでデータを取得し、TabFragment1に入れて、次にrecyclerViewアダプタがTabFragment1でデータをプルしてリサイクラビューを埋めたいとします。 –

関連する問題