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/zh-hant/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

發表回復

登錄後才能評論