Android 以编程方式添加、删除和设置CardView参数
我正在开发一个应用程序,使用Android 以编程方式添加、删除和设置CardView参数,android,android-recyclerview,android-cardview,Android,Android Recyclerview,Android Cardview,我正在开发一个应用程序,使用RecyclerView&cardwiew小部件显示用户添加的联系人 该应用程序允许用户添加一张新卡,在将卡添加到列表时,设置卡内显示的适当信息(姓名、电话号码和图像) 用户设置的号码可以拨打启动电话 单击卡时呼叫 我已经创建了UI,但我不知道如何使用RecyclerView进行上述操作。如何解决此问题?要将联系人绑定到CardView,您需要创建ArrayList来存储联系人以便进行绑定。首先,创建一个名为Contact.java的新类,并添加以下代码: pu
RecyclerView
&cardwiew
小部件显示用户添加的联系人
- 该应用程序允许用户添加一张新卡,在将卡添加到列表时,设置卡内显示的适当信息(姓名、电话号码和图像)
- 用户设置的号码可以拨打启动电话 单击卡时呼叫
我已经创建了UI,但我不知道如何使用
RecyclerView
进行上述操作。如何解决此问题?要将联系人绑定到CardView
,您需要创建ArrayList
来存储联系人以便进行绑定。首先,创建一个名为Contact.java
的新类,并添加以下代码:
public class Contact {
public String name;
public int number;
public Contact(String name, int number) {
this.name = name;
this.number = number;
}
}
public class ContactsAdapter extends RecyclerView.Adapter<ContactsAdapter.ContactsViewHolder> {
public List<Contact> list;
public ContactsAdapter(List<ContactsAdapter> list) {
this.list = list;
}
public static class ContactsViewHolder extends RecyclerView.ViewHolder {
// Update:
RelativeLayout item;
ImageView photo;
TextView name;
TextView number;
public ContactsViewHolder(View view) {
super(view);
// Update:
item = (RelativeLayout) view.findViewById(R.id.id_to_rel_layout); // If not, then add one by using android.id="@+id/whatever"
photo = (ImageView) view.findViewById(R.id.contact_photo);
name = (TextView) view.findViewById(R.id.contact_name);
number = (TextView) view.findViewById(R.id.contact_number);
}
}
@Override
public ContactsViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.contacts_layout, viewGroup, false);
ContactsViewHolder viewHolder = new ContactsViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(ContactsViewHolder viewHolder, final int position) {
// Update:
item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Do onclick stuff here such as dialing someone
}
});
viewHolder.photo.setImageURI(your_uri);
viewHolder.name.setText(list.get(position).name);
viewHolder.number.setText(list.get(position).number);
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
@Override
public int getItemCount() {
return list.size();
}
}
private List<Contact> list = new ArrayList<>;
public void loadContacts() {
list.add(new Contacts(photoUri, name, number));
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.your_recyclerview);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
ContactsAdapter adapter = new ContactsAdapter(list);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(adapter);
}
此类将确保我们的ArrayList
中的每个实例都具有联系人姓名和电话号码所需的值。现在,我们需要创建一个适配器类来管理CardView
中的单击事件,并将ArrayList
中的值绑定到CardView
中的视图。创建一个名为ContactsAdapter.java
的新类,并添加以下代码:
public class Contact {
public String name;
public int number;
public Contact(String name, int number) {
this.name = name;
this.number = number;
}
}
public class ContactsAdapter extends RecyclerView.Adapter<ContactsAdapter.ContactsViewHolder> {
public List<Contact> list;
public ContactsAdapter(List<ContactsAdapter> list) {
this.list = list;
}
public static class ContactsViewHolder extends RecyclerView.ViewHolder {
// Update:
RelativeLayout item;
ImageView photo;
TextView name;
TextView number;
public ContactsViewHolder(View view) {
super(view);
// Update:
item = (RelativeLayout) view.findViewById(R.id.id_to_rel_layout); // If not, then add one by using android.id="@+id/whatever"
photo = (ImageView) view.findViewById(R.id.contact_photo);
name = (TextView) view.findViewById(R.id.contact_name);
number = (TextView) view.findViewById(R.id.contact_number);
}
}
@Override
public ContactsViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.contacts_layout, viewGroup, false);
ContactsViewHolder viewHolder = new ContactsViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(ContactsViewHolder viewHolder, final int position) {
// Update:
item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Do onclick stuff here such as dialing someone
}
});
viewHolder.photo.setImageURI(your_uri);
viewHolder.name.setText(list.get(position).name);
viewHolder.number.setText(list.get(position).number);
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
@Override
public int getItemCount() {
return list.size();
}
}
private List<Contact> list = new ArrayList<>;
public void loadContacts() {
list.add(new Contacts(photoUri, name, number));
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.your_recyclerview);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
ContactsAdapter adapter = new ContactsAdapter(list);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(adapter);
}
您已成功地将您的联系人与您的cardwiew
绑定。告诉我你是怎么回事。你是否正在努力将姓名和电话等联系人值绑定到CardView
本身及其视图
s?绝对是@Razor。此外,你的CardView
中是否有联系人姓名和电话号码的小部件,它们是TextView
s?不仅仅是TextView s,而且是一个图像视图。顺便说一句,谢谢你的问题审查!还有一件事,您是否从SQLite数据库访问联系人?为什么给模型对象一个复数名称?实例不应该是联系人而不是联系人,因为它内部不包含列表,只包含一个联系人吗?@Mattwolve这没什么大不了的,我可以简单地从模型对象的名称中删除“s”。@Razor我非常感谢您的帮助,我会尝试一下。但是我在您的代码中找不到用户输入的onClickListener to拨号号码。CardView
aRelativeLayout
?@Razor是的,是RelativeLayout