Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 以编程方式添加、删除和设置CardView参数_Android_Android Recyclerview_Android Cardview - Fatal编程技术网

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
a
RelativeLayout
?@Razor是的,是RelativeLayout