从适配器添加到 ArrayList android

Adding to ArrayList from Adapter android

我在 class TabFragment1 中有 ArrayList。我有已安装应用程序列表的适配器。当我单击 ImageView 应用程序名称和图标时,应该转到 TabFragment1 ArrayList,但我无法解析它。单击 iv 时应用程序崩溃。

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;
    }


}

添加的应用程序

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;
    }
}

崩溃日志:

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.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)

对于回收站视图,您应该使用 RecyclerView.Adapter<> 并使用界面在 activity

中获取点击回调

您的 TabFragment1 class 未在构造函数中初始化其成员之一:public List<AddedApps> data。因此,当您尝试执行 tab1.data.add(...) 时,您遇到了空引用,因为 onCreateView() 尚未被调用并且 data 仍为空。

覆盖 TabFragment1 class 中的构造函数并在那里初始化该成员。请记住调用 super 构造函数,以便 Fragment class 正常运行。