ListView控件详解

ListView 是 Android 系统中最常用的 UI 控件之一,它用于以列表的形式显示数据。在本文中,我们将详细介绍 ListView 控件的各种属性和方法,以及使用它的实际案例。

一、ListView 控件的属性

1. android:id:ListView 控件的唯一标识符,用于在代码中引用它。

2. android:layout_width:ListView 控件的宽度,可以通过具体的数值或填充父布局等方式进行指定。

3. android:layout_height:ListView 控件的高度,同样可以通过具体的数值或填充父布局等方式进行指定。

4. android:divider:用于设置 ListView 中每个 item 之间的分隔线颜色和大小。

5. android:dividerHeight:设置水平分割线的高度。

6. android:entries:使用这个属性可以将一个字符串数组绑定到 ListView 控件上。ListView 将根据字数组内容生成 item 显示内容。

7. android:headerDividersEnabled:用于设置是否开启 header 的分隔线。

8. android:footerDividersEnabled:用于设置是否开启 footer 的分隔线。

9. android:listSelector:设置 ListView 中 item 被点击时的背景色。

10. android:scrollbars:设置 ListView 的滚动条类型。可以使用 none、vertical、horizontal 或 both 等属性值。

二、ListView 控件的方法

1. addHeaderView:将一个 View 添加到 ListView 控件的顶部作为 header,在数据列表之前显示。使用该方法时,需要先使用 getHeaderViewsCount 方法获取已添加的 header 数量,从而保证添加的 header 与数据列表不会冲突。

2. addFooterView:将一个 View 添加到 ListView 控件的底部作为 footer,在数据列表之后显示。通过该方法添加的 footer,同样需要通过 getFooterViewsCount 方法获取 footer 的数量,以跟数据列表进行分离。

3. setAdapter:绑定 ListView 控件与数据源之间的关系。一般情况下,我们需要继承 BaseAdapter 类并实现其中的抽象方法来创建我们自己的适配器类。然后,我们可以将适配器与 ListView 控件进行绑定。

4. setOnItemClickListener:设置 ListView 控件的 item 的点击事件监听器。在该方法中,我们需要实现 onItemClick 回调方法,以响应 item 的点击事件。

5. setEmptyView:该方法可以在 ListView 内容为空时显示默认视图。这里的默认视图通常是一个 TextView,显示类似“暂无数据”的提示信息。

6. getCheckedItemPositions:获取所有选中的 item 的位置。

7. getFirstVisiblePosition:获取 ListView 中第一个可见 item 的位置。

8. getLastVisiblePosition:获取 ListView 中最后一个可见 item 的位置。

9. smoothScrollToPosition:平滑地滚动到特定位置。

三、ListView 控件的使用案例

下面我们以在 ListView 控件中显示一个联系人列表为例,来演示 ListView 的使用方法。

1. 布局文件

首先,在布局文件中,我们需要定义一个 ListView 控件以及 toolbar。如下所示:

```xml

android:layout_width="match_parent"

android:layout_height="match_parent">

android:layout_width="match_parent"

android:layout_height="wrap_content"

layout="@layout/toolbar" />

android:id="@+id/contact_list"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_below="@id/toolbar" />

```

2. 数据模型

接下来,我们需要定义一个数据模型 Contact,来保存联系人的信息。

```java

public class Contact {

private String name;

private String phoneNumber;

public Contact(String name, String phoneNumber) {

this.name = name;

this.phoneNumber = phoneNumber;

}

public String getName() {

return name;

}

public String getPhoneNumber() {

return phoneNumber;

}

}

```

3. 适配器

然后,我们需要定义一个适配器 ContactAdapter,以将数据模型中的信息显示到 ListView 控件中。

```java

public class ContactAdapter extends BaseAdapter {

private List mData;

private LayoutInflater mInflater;

public ContactAdapter(Context context, List data) {

mData = data;

mInflater = LayoutInflater.from(context);

}

@Override

public int getCount() {

return mData.size();

}

@Override

public Object getItem(int position) {

return mData.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder;

if (convertView == null) {

convertView = mInflater.inflate(R.layout.item_contact, null);

holder = new ViewHolder();

holder.nameTv = convertView.findViewById(R.id.tv_name);

holder.phoneTv = convertView.findViewById(R.id.tv_phone);

convertView.setTag(holder);

} else {

holder = (ViewHolder) convertView.getTag();

}

Contact contact = mData.get(position);

holder.nameTv.setText(contact.getName());

holder.phoneTv.setText(contact.getPhoneNumber());

return convertView;

}

static class ViewHolder {

TextView nameTv;

TextView phoneTv;

}

}

```

4. item 布局

接下来,我们需要在 ListView 中显示联系人的姓名和电话号码。因此,我们需要定义一个 item_contact.xml 布局文件。如下所示:

```xml

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical"

android:padding="16dp">

android:id="@+id/tv_name"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:textSize="18sp" />

android:id="@+id/tv_phone"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:textSize="16sp"

android:textColor="@color/black_54" />

```

5. MainActivity

最后,在 MainActivity 中,我们需要将适配器和数据源绑定到 ListView 控件上,并设置 item 的点击事件监听器。

```java

public class MainActivity extends AppCompatActivity {

private ListView mContactList;

private ContactAdapter mContactAdapter;

private List mData = new ArrayList<>();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initData();

initView();

}

private void initData() {

mData.add(new Contact("Tom", "12345678901"));

mData.add(new Contact("Jerry", "12345678902"));

mData.add(new Contact("Mike", "12345678903"));

mData.add(new Contact("John", "12345678904"));

mData.add(new Contact("Lucy", "12345678905"));

mData.add(new Contact("Lily", "12345678906"));

}

private void initView() {

Toolbar toolbar = findViewById(R.id.toolbar);

setSupportActionBar(toolbar);

mContactList = findViewById(R.id.contact_list);

mContactAdapter = new ContactAdapter(this, mData);

mContactList.setAdapter(mContactAdapter);

mContactList.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView parent, View view, int position, long id) {

Contact contact = mData.get(position);

Toast.makeText(MainActivity.this, contact.getName() + ": " + contact.getPhoneNumber(), Toast.LENGTH_SHORT).show();

}

});

mContactList.setEmptyView(findViewById(R.id.empty_view));

}

}

```

以上就是一个简单的 ListView 使用案例。在实际应用中,ListView 还有许多其他的属性和方法可以使用。我们根据具体的需求进行选择和配置即可。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(117) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部