Android Studio实现简单的ListView

一、ListView简介

在开发移动应用程序时,经常需要展示一组数据。这时,ListView就会派上大用场。ListView是Android中最基本的控件之一,可以快速、高效地展示一组数据,支持滚动,可以很好地适配各种屏幕大小。ListView通常用于实现类似聊天记录、联系人列表等需要展示大量数据的场景。

ListView展示数据的原理比较简单:首先,需要一个适配器(Adapter),将数据进行封装和处理,然后将适配器设置到ListView中,再刷新ListView即可显示出数据。

二、创建ListView

接下来我们就来实现一个简单的ListView,展示一组字符串数组。首先,我们需要在XML文件中定义ListView组件:

    <ListView
        android:id="@+id/my_list_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

定义好ListView组件后,我们需要在Java文件中获取到这个组件,并进行设置:

    ListView listView = (ListView)findViewById(R.id.my_list_view);

接着,我们需要定义一个字符串数组,作为ListView要展示的数据:

    String[] data = { "A", "B", "C", "D", "E", "F", "G" };

有了字符串数组后,我们就需要定义一个适配器,来将数据处理后返回给ListView。我们可以使用Android自带的ArrayAdapter来实现适配器:

    ArrayAdapter<String> adapter =
        new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);

这里,我们使用了Android自带的simple_list_item_1布局文件,将数据展示在ListView中。

有了适配器后,我们就需要将适配器设置到ListView中:

    listView.setAdapter(adapter);

最后,我们还需要刷新ListView,以展示数据:

    adapter.notifyDataSetChanged();

这样,一个简单的ListView就创建好了!完整代码如下:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView listView = (ListView)findViewById(R.id.my_list_view);

        String[] data = { "A", "B", "C", "D", "E", "F", "G" };

        ArrayAdapter<String> adapter =
            new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);

        listView.setAdapter(adapter);

        adapter.notifyDataSetChanged();
    }
}

三、自定义ListView

虽然Android自带的ListView可以满足一般的需要,但如果需要更加个性化的展示效果,那么就需要自定义ListView了。自定义ListView通常需要自定义适配器,以满足自己的需要。

下面我们就以一个简单的例子来介绍自定义ListView的方法。假设我们需要展示一个联系人列表,每个联系人有头像和名字。首先,我们需要自定义一个数据结构,用来存储联系人的信息:

public class Contact {

    private int avatar;
    private String name;

    public Contact(int avatar, String name) {
        this.avatar = avatar;
        this.name = name;
    }

    public int getAvatar() {
        return avatar;
    }

    public void setAvatar(int avatar) {
        this.avatar = avatar;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

定义好数据结构后,我们就需要自定义适配器了。自定义适配器需要继承自BaseAdapter,并对其方法进行实现。我们可以在getView方法中自定义每个列表项的布局,并展示联系人的头像和名字。

public class ContactAdapter extends BaseAdapter {

    private List<Contact> data;
    private Context context;

    public ContactAdapter(Context context, List<Contact> data) {
        this.context = context;
        this.data = data;
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.item_contact, null);
            viewHolder = new ViewHolder();
            viewHolder.avatar = convertView.findViewById(R.id.avatar);
            viewHolder.name = convertView.findViewById(R.id.name);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder)convertView.getTag();
        }

        Contact contact = data.get(position);
        viewHolder.avatar.setImageResource(contact.getAvatar());
        viewHolder.name.setText(contact.getName());

        return convertView;
    }

    static class ViewHolder {
        ImageView avatar;
        TextView name;
    }
}

有了适配器后,我们就可以定义一个ListView,并将自定义的适配器设置到ListView中:

    ListView listView = (ListView)findViewById(R.id.my_list_view);

    List<Contact> data = new ArrayList<>();
    data.add(new Contact(R.drawable.avatar1, "Tom"));
    data.add(new Contact(R.drawable.avatar2, "Jerry"));
    data.add(new Contact(R.drawable.avatar3, "Mike"));
    data.add(new Contact(R.drawable.avatar4, "John"));

    ContactAdapter adapter = new ContactAdapter(this, data);
    listView.setAdapter(adapter);

这样,一个自定义的ListView就创建完成了!完整代码如下:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView listView = (ListView)findViewById(R.id.my_list_view);

        List<Contact> data = new ArrayList<>();
        data.add(new Contact(R.drawable.avatar1, "Tom"));
        data.add(new Contact(R.drawable.avatar2, "Jerry"));
        data.add(new Contact(R.drawable.avatar3, "Mike"));
        data.add(new Contact(R.drawable.avatar4, "John"));

        ContactAdapter adapter = new ContactAdapter(this, data);
        listView.setAdapter(adapter);
    }

    public class Contact {

        private int avatar;
        private String name;

        public Contact(int avatar, String name) {
            this.avatar = avatar;
            this.name = name;
        }

        public int getAvatar() {
            return avatar;
        }

        public void setAvatar(int avatar) {
            this.avatar = avatar;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

    public class ContactAdapter extends BaseAdapter {

        private List<Contact> data;
        private Context context;

        public ContactAdapter(Context context, List<Contact> data) {
            this.context = context;
            this.data = data;
        }

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

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

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder viewHolder;
            if (convertView == null) {
                convertView = LayoutInflater.from(context).inflate(R.layout.item_contact, null);
                viewHolder = new ViewHolder();
                viewHolder.avatar = convertView.findViewById(R.id.avatar);
                viewHolder.name = convertView.findViewById(R.id.name);
                convertView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder)convertView.getTag();
            }

            Contact contact = data.get(position);
            viewHolder.avatar.setImageResource(contact.getAvatar());
            viewHolder.name.setText(contact.getName());

            return convertView;
        }

        static class ViewHolder {
            ImageView avatar;
            TextView name;
        }
    }
}

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/272070.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝的头像小蓝
上一篇 2024-12-17 00:08
下一篇 2024-12-17 00:08

相关推荐

  • Python简单数学计算

    本文将从多个方面介绍Python的简单数学计算,包括基础运算符、函数、库以及实际应用场景。 一、基础运算符 Python提供了基础的算术运算符,包括加(+)、减(-)、乘(*)、除…

    编程 2025-04-29
  • Python满天星代码:让编程变得更加简单

    本文将从多个方面详细阐述Python满天星代码,为大家介绍它的优点以及如何在编程中使用。无论是刚刚接触编程还是资深程序员,都能从中获得一定的收获。 一、简介 Python满天星代码…

    编程 2025-04-29
  • Python海龟代码简单画图

    本文将介绍如何使用Python的海龟库进行简单画图,并提供相关示例代码。 一、基础用法 使用Python的海龟库,我们可以控制一个小海龟在窗口中移动,并利用它的“画笔”在窗口中绘制…

    编程 2025-04-29
  • Python樱花树代码简单

    本文将对Python樱花树代码进行详细的阐述和讲解,帮助读者更好地理解该代码的实现方法。 一、简介 樱花树是一种图形效果,它的实现方法比较简单。Python中可以通过turtle这…

    编程 2025-04-28
  • Python大神作品:让编程变得更加简单

    Python作为一种高级的解释性编程语言,一直被广泛地运用于各个领域,从Web开发、游戏开发到人工智能,Python都扮演着重要的角色。Python的代码简洁明了,易于阅读和维护,…

    编程 2025-04-28
  • Android ViewPager和ScrollView滑动冲突问题

    Android开发中,ViewPager和ScrollView是两个常用的控件。但是当它们同时使用时,可能会发生滑动冲突的问题。本文将从多个方面介绍解决Android ViewPa…

    编程 2025-04-28
  • 用Python实现简单爬虫程序

    在当今时代,互联网上的信息量是爆炸式增长的,其中很多信息可以被利用。对于数据分析、数据挖掘或者其他一些需要大量数据的任务,我们可以使用爬虫技术从各个网站获取需要的信息。而Pytho…

    编程 2025-04-28
  • Android如何点击其他区域收起软键盘

    在Android应用中,当输入框获取焦点弹出软键盘后,我们希望能够点击其他区域使软键盘消失,以提升用户体验。本篇文章将说明如何实现这一功能。 一、获取焦点并显示软键盘 在Andro…

    编程 2025-04-28
  • 如何制作一个简单的换装游戏

    本文将从以下几个方面,为大家介绍如何制作一个简单的换装游戏: 1. 游戏需求和界面设计 2. 使用HTML、CSS和JavaScript开发游戏 3. 实现游戏的基本功能:拖拽交互…

    编程 2025-04-27
  • Guava Limiter——限流器的简单易用

    本文将从多个维度对Guava Limiter进行详细阐述,介绍其定义、使用方法、工作原理和案例应用等方面,并给出完整的代码示例,希望能够帮助读者更好地了解和使用该库。 一、定义 G…

    编程 2025-04-27

发表回复

登录后才能评论