首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将ListView适配器转换为RecyclerView适配器?

如何将ListView适配器转换为RecyclerView适配器?
EN

Stack Overflow用户
提问于 2019-04-24 02:10:02
回答 2查看 678关注 0票数 2

我目前使用的是listview,而不是RecyclerView。我想知道是否有一种简单的方法可以将ListView适配器转换为RecyclerView适配器,从而将listview转换为RecyclerView

到目前为止,我为ListView适配器编写了以下代码:

public class MyVisitorAdapter extends ArrayAdapter<VisitorItem> implements Filterable {

    public ArrayList<VisitorItem> original;
    public ArrayList<VisitorItem> fitems;
    private Filter filter;
    private Context context;

    //This whole class needs to be refactored to support binding with viewholders or add recyclerview. This was a trial run to check out
    //how listview pans out, but forgot to remove and update it later
    public MyVisitorAdapter(Context context, ArrayList<VisitorItem> items) {
        super(context, 0, items);
        this.original = new ArrayList<>();
        this.original.addAll(items);
        this.fitems = new ArrayList<>();
        this.fitems.addAll(items);
        this.context = context;
    }

    @Override
    public void add(VisitorItem item) {
        this.fitems.add(item);
        this.original.add(item);
        notifyDataSetChanged();
    }

    @Override
    public void remove(VisitorItem item) {
        this.fitems.remove(item);
        this.original.remove(item);
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return fitems.size();
    }

    @Override
    public VisitorItem getItem(int position) {
        return fitems.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = vi.inflate(R.layout.item_guest, null);
        VisitorItem item = fitems.get(position);
        if (item != null) {
            TextView firstName = v.findViewById(R.id.firstName);
            firstName.setText(item.firstName);
            TextView lastName = v.findViewById(R.id.lastName);
            lastName.setText(item.lastName);
            TextView email = v.findViewById(R.id.email);
            email.setText(item.email);
            TextView phoneNumber = v.findViewById(R.id.phoneNumber);
            phoneNumber.setText(item.phoneNumber);
            View dividerView = v.findViewById(R.id.item_divider);
            if (getContext() instanceof SubmitGuestsActivity) {
                dividerView.setVisibility(View.GONE);
            }

            if (this.getContext() instanceof MyVisitorActivity) {
                TextView clearButton = v.findViewById(R.id.item_delete_guest);
                clearButton.setVisibility(View.VISIBLE);
                clearButton.setOnClickListener(v1 -> new AlertDialog.Builder(getContext(), R.style.myDialogTheme)
                        .setCancelable(true)
                        .setTitle("Confirm delete")
                        .setMessage("Are you sure?")
                        .setPositiveButton("Yes", (dialog, which) -> {
                            VisitorItem itemToBeDeleted = getItem(position);
                            VisitorItem.delete(VisitorItem.class, itemToBeDeleted.getId());
                            remove(itemToBeDeleted);
                            fitems.remove(itemToBeDeleted);
                            Toast.makeText(getContext(), "Deleted", Toast.LENGTH_SHORT).show();
                        })
                        .setNegativeButton("No", (dialog, which) -> dialog.dismiss())
                        .create().show());
            }

        }
        return v;
    }

    @Override
    public Filter getFilter() {
        if (filter == null) {
            filter = new ItemsFilter();
        }
        return filter;
    }

    private class ItemsFilter extends Filter {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();
            String prefix = constraint.toString().toLowerCase();

            if (prefix.length() == 0) {
                ArrayList<VisitorItem> list = new ArrayList<>(original);
                results.values = list;
                results.count = list.size();
            } else {
                final ArrayList<VisitorItem> list = new ArrayList<>(original);
                final ArrayList<VisitorItem> nlist = new ArrayList<>();
                int count = list.size();

                for (int i = 0; i < count; i++) {
                    final VisitorItem item = list.get(i);
                    final String firstName = item.firstName.toLowerCase();
                    final String lastName = item.lastName.toLowerCase();
                    final String email = item.email.toLowerCase();

                    if (firstName.contains(prefix) && lastName.contains(prefix) && email.contains(prefix)) {
                        nlist.add(item);
                    }

                }
                results.values = nlist;
                results.count = nlist.size();
            }

            return results;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            fitems = (ArrayList<VisitorItem>) results.values;
            MyVisitorAdapter.this.notifyDataSetChanged();
        }
    }
}

在我的活动中,我调用:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Intent i = new Intent(MyVisitorActivity.this, AddVisitorActivity.class);
        i.putExtra("firstName", mRegisterAdapter.getItem(position).firstName);
        i.putExtra("lastName", mRegisterAdapter.getItem(position).lastName);
        i.putExtra("email", mRegisterAdapter.getItem(position).email);
        i.putExtra("phoneNumber", mRegisterAdapter.getItem(position).phoneNumber);
        i.putExtra("position", position);
        startActivityForResult(i, 202);
    }
});

有没有关于如何做的想法?

我目前正在使用我的列表视图和更新项目,我想将所有内容转换为RecyclerView,以提高效率。

提前感谢!

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55817088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档