自定义ListView的适配器

弗雷迪森

我创建一个联系人列表并使用自定义ListView(有照片,名称和不可见的CheckBox)。像这样:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_margin="8dp">

<ImageView
    android:id="@+id/lv_img"
    android:layout_width="75dp"
    android:layout_height="75dp"
    android:src="@drawable/default_user"
    android:layout_weight="0"/>

<TextView
    android:id="@+id/lv_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:layout_margin="16dp"
    android:layout_gravity="center_vertical"
    android:textSize="24sp"/>

<CheckBox
    android:id="@+id/lv_box"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="0"
    android:visibility="invisible"
    android:layout_gravity="center"/>

</LinearLayout>

为了解决这个问题,我使用了适配器:

public class ContactAdapter extends BaseAdapter {

private Context context;
private LayoutInflater inflater;
private ArrayList<Contact> contacts;

private View view;

public ContactAdapter(Context context, ArrayList<Contact> contacts) {
    this.context = context;
    this.contacts = contacts;
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

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

@Override
public Object getItem(int position) {
    return contacts.get(position);
}

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

private Contact getContact(int position) {
    return (Contact) getItem(position);
}

public void showCheckBox() {
        view = inflater.inflate(R.layout.contact_item, null, false);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    view = convertView;
    if (view == null) {
        view = inflater.inflate(R.layout.contact_item, parent, false);
    }

    Contact c = getContact(position);
    ((TextView) view.findViewById(R.id.lv_name)).setText(c.getName() + " " + c.getSurname());
    ((ImageView) view.findViewById(R.id.lv_img)).setImageDrawable(c.getPhoto());
    return view;
}

public ArrayList<Contact> getChecked() {
    ArrayList<Contact> checkedContacts = new ArrayList<Contact>();
    for (Contact c : contacts) {
        if (c.isChecked()) checkedContacts.add(c);
    }
    return checkedContacts;
}
}

我需要在调用showCheckBox()时使所有CheckBox变为可见,但仅在ListView上的最后一个CheckBox变为可见。我该如何解决?

拉米

试试这个建议:

public class ContactAdapter extends BaseAdapter {

private Context context;
private LayoutInflater inflater;
private ArrayList<Contact> contacts;
private boolean isCheckBoxVisible;
private View view;

public ContactAdapter(Context context, ArrayList<Contact> contacts) {
    this.context = context;
    this.contacts = contacts;
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.isCheckBoxVisible = false; 
}

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

@Override
public Object getItem(int position) {
    return contacts.get(position);
}

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

private Contact getContact(int position) {
    return (Contact) getItem(position);
}

public void showCheckBox() {// if you want, you can add a boolean parameter to this method to change visibility
    isCheckBoxVisible = true;
    notifyDataSetChanged();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    view = convertView;
    if (view == null) {
        view = inflater.inflate(R.layout.contact_item, parent, false);
    }
    CheckBox cb = (CheckBox)view.findViewById(R.id.lv_box);
    if(isCheckBoxVisible){
        cb.setVisibility(View.VISIBLE);
    } else {
        cb.setVisibility(View.INVISIBLE);
    }
    Contact c = getContact(position);
    ((TextView) view.findViewById(R.id.lv_name)).setText(c.getName() + " " + c.getSurname());
    ((ImageView) view.findViewById(R.id.lv_img)).setImageDrawable(c.getPhoto());
    return view;
}

public ArrayList<Contact> getChecked() {
    ArrayList<Contact> checkedContacts = new ArrayList<Contact>();
    for (Contact c : contacts) {
        if (c.isChecked()) checkedContacts.add(c);
    }
    return checkedContacts;
}
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ListView的自定义适配器

来自分类Dev

ListView自定义适配器丢失imageView

来自分类Dev

自定义适配器显示RuntimeException-ListView

来自分类Dev

使用自定义适配器过滤ListView

来自分类Dev

自定义listview适配器上的OnclickListner

来自分类Dev

ListView自定义适配器重复项

来自分类Dev

自定义基础适配器到ListView

来自分类Dev

使用自定义适配器从listview搜索项目

来自分类Dev

Android ListView onClickListener自定义适配器

来自分类Dev

使用自定义适配器未显示ListView

来自分类Dev

自定义ListView适配器中的NullPointerException

来自分类Dev

ListView自定义适配器丢失imageView

来自分类Dev

Android自定义ListView /适配器

来自分类Dev

在自定义适配器中遍历ListView

来自分类Dev

Android ListView onItemclick以及自定义适配器

来自分类Dev

自定义适配器的问题

来自分类Dev

Android Studio中带有自定义适配器的自定义ListView

来自分类Dev

setOnClickListener不使用自定义适配器和自定义ListView触发

来自分类Dev

使用自定义适配器的ListView中的自定义行

来自分类Dev

ListView /自定义数组适配器-调用getView时适配器设置为null

来自分类Dev

具有ListView片段和自定义ListView适配器的Android Pull-to-Refresh

来自分类Dev

使用自定义 ListView 适配器刷新 Fragment ListView

来自分类Dev

如何在ListView适配器中缓存自定义视图?

来自分类Dev

如何使用自定义列表适配器显示listView为空

来自分类Dev

具有自定义适配器多选问题的android listview

来自分类Dev

OnItemCLickListener在ListView自定义适配器中不起作用

来自分类Dev

如何从ListView中的自定义适配器获取数据?

来自分类Dev

使用自定义列表适配器保存和还原ListView

来自分类Dev

自定义适配器ListView,setOnCheckedChangeListener不起作用

Related 相关文章

  1. 1

    ListView的自定义适配器

  2. 2

    ListView自定义适配器丢失imageView

  3. 3

    自定义适配器显示RuntimeException-ListView

  4. 4

    使用自定义适配器过滤ListView

  5. 5

    自定义listview适配器上的OnclickListner

  6. 6

    ListView自定义适配器重复项

  7. 7

    自定义基础适配器到ListView

  8. 8

    使用自定义适配器从listview搜索项目

  9. 9

    Android ListView onClickListener自定义适配器

  10. 10

    使用自定义适配器未显示ListView

  11. 11

    自定义ListView适配器中的NullPointerException

  12. 12

    ListView自定义适配器丢失imageView

  13. 13

    Android自定义ListView /适配器

  14. 14

    在自定义适配器中遍历ListView

  15. 15

    Android ListView onItemclick以及自定义适配器

  16. 16

    自定义适配器的问题

  17. 17

    Android Studio中带有自定义适配器的自定义ListView

  18. 18

    setOnClickListener不使用自定义适配器和自定义ListView触发

  19. 19

    使用自定义适配器的ListView中的自定义行

  20. 20

    ListView /自定义数组适配器-调用getView时适配器设置为null

  21. 21

    具有ListView片段和自定义ListView适配器的Android Pull-to-Refresh

  22. 22

    使用自定义 ListView 适配器刷新 Fragment ListView

  23. 23

    如何在ListView适配器中缓存自定义视图?

  24. 24

    如何使用自定义列表适配器显示listView为空

  25. 25

    具有自定义适配器多选问题的android listview

  26. 26

    OnItemCLickListener在ListView自定义适配器中不起作用

  27. 27

    如何从ListView中的自定义适配器获取数据?

  28. 28

    使用自定义列表适配器保存和还原ListView

  29. 29

    自定义适配器ListView,setOnCheckedChangeListener不起作用

热门标签

归档