【问题标题】:Android data-binding with recycler viewAndroid 数据绑定与回收器视图
【发布时间】:2016-07-20 10:16:53
【问题描述】:

我想在我的应用程序中实现“新”数据绑定,但我被卡住了。我有一个保存联系人的数据库,因此我需要从另一个片段中获取数据并将它们显示在回收站视图中。 SO:带有回收器视图的片段->单击AddButton->使用editTexts打开新片段->填充editTexts->保存到数据库->在上一个片段中显示(使用该回收器视图) 我已经完成了适配器,但我不知道如何在我的片段中设置它。请问你能帮帮我吗?

型号

public class Contact extends SugarRecord {

    public String name;
    private String number;
    private String email;
    private boolean isFavourite;

    public Contact() {
    }

    public Contact(String name, String email, String number, Boolean isFavourite) {
        this.name = name;
        this.email = email;
        this.number = number;
        this.isFavourite = isFavourite;
    }
    public void setName(String name) {
        this.name = name;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public void setFavourite(Boolean isFavourite) {
        this.isFavourite = isFavourite;
    }

    @Bindable
    public String getName() {
        return name;
    }

    @Bindable
    public String getEmail() {
        return email;
    }

    @Bindable
    public String getNumber() {
        return number;
    }

    @Bindable
    public boolean getFavourite() {
        return isFavourite;
    }
}

适配器

public class ContactsRecyclerAdapter extends RecyclerView.Adapter<ContactsRecyclerAdapter.BindingHolder> {
    private List<Contact> mContacts;


    public static class BindingHolder extends RecyclerView.ViewHolder {
        private ViewDataBinding binding;

        public BindingHolder(View rowView) {
            super(rowView);
            binding = DataBindingUtil.bind(rowView);
        }
         public ViewDataBinding getBinding() {
             return binding;
         }
    }

    public ContactsRecyclerAdapter(List<Contact> recyclerUsers) {
        this.mContacts = recyclerUsers;
    }

    @Override
    public BindingHolder onCreateViewHolder(ViewGroup parent, int type) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item_contact, parent, false);
        BindingHolder holder = new BindingHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(BindingHolder holder, int position) {
        final Contact contact = mContacts.get(position);
        holder.getBinding().setVariable(BR.contact, contact);
        holder.getBinding().executePendingBindings();
    }

    @Override
    public int getItemCount() {
        return mContacts.size();
    }
}

我想要回收站视图的片段

public class ContactListFragment extends Fragment implements View.OnClickListener {

    private static final String NEWCONTACT = "newcontact";

    FloatingActionButton fabButton;
    SearchView searchView;

    public static ContactListFragment newInstance() {
        Bundle args = new Bundle();
        ContactListFragment fragment = new ContactListFragment();
        fragment.setArguments(args);
        return fragment;
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_contact_list, container, false);


        return view;
    }
----- other stuff in the fragment ------

【问题讨论】:

  • 在前一个片段的 onResume() 方法中更新您的联系人列表,然后在适配器上调用 notifyDataSetChanged()。
  • 能否详细描述一下?
  • 您必须在 mContacts(即 List) 对象中更新新创建的联系人。
  • 好的,谢谢。以及在哪里调用 notifyDataSetChanged?
  • 更新联系人对象后,立即调用 notifyDataSetChanged()。

标签: android database android-fragments data-binding android-recyclerview


【解决方案1】:

尝试在ContactListFragmentonCreateView方法中初始化RecyclerView,如下所示

    View view = inflater.inflate(R.layout.fragment_contact_list, container, false);
    recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
    if(recyclerView != null) {
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        recyclerView.setAdapter(new ContactsRecyclerAdapter(recyclerUsers));
    }

这样您可以在片段中将适配器设置为回收器视图。

【讨论】:

    猜你喜欢
    • 2019-11-06
    • 2016-04-20
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    相关资源
    最近更新 更多