2016-04-09 33 views
0

TabFragment1 sınıfında ArrayList kullanıyorum. Yüklü uygulamalar listesi için adaptörüm var. Ve ben ImageView uygulama adını tıkladığınızda ve ikon TabFragment1 ArrayList gitmeli, ancak bunu çözemiyorum. Iv'i tıkladığımda uygulama çöküyor.Adaptör android'den ArrayList'e ekleme

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: Bir RecyclerView.Adapter < kullanmak> ve etkinlik geri tıklama çağrıyı almak için bir arayüz kullanması gereken bir geri dönüşüm görüntüsü

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) 

cevap

1

Kişisel TabFragment1 sınıfı başlatılamadı değil Kuruculardaki üyelerinden biri: public List<AddedApps> data. Yani, tab1.data.add(...) yapmayı denediğinizde, onCreateView() henüz çağrılmadığından ve data hala boş olduğundan, boş bir başvuru girdiniz.

Yapıcıyı TabFragment1 sınıfınızda geçersiz kılın ve o üyeyi oraya sıfırlayın. Fragman sınıfı normal davranacak şekilde super yapıcısını çağırmayı unutmayın.

0

+0

2 adaptör var: 1 geri dönüşümcü görünümü ve 1 liste görünümü için. Ben sadece listView bağdaştırıcısında veri çekip TabFragment1'e yerleştirmek istiyorum, daha sonra geri dönüstür. –