我的Android開發之路——ListView的使用

来源:https://www.cnblogs.com/jintao-zhong/archive/2018/03/14/8568764.html
-Advertisement-
Play Games

在Android開發過程中,遇到需要列表顯示的時候,這時候就會用到listview。 1.首先創建一個ListViewTest項目,選擇empty activity類型。修改activity_main.xml的佈局文件,添加listview控制項,設置寬高和id等屬性 此時通過預覽就可以看見listv ...


  在Android開發過程中,遇到需要列表顯示的時候,這時候就會用到listview。

  

  1.首先創建一個ListViewTest項目,選擇empty activity類型。修改activity_main.xml的佈局文件,添加listview控制項,設置寬高和id等屬性

<?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="match_parent">
    
    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        
    </ListView>

</LinearLayout>

   此時通過預覽就可以看見listview的佈局情況,接下來我們要添加每一個item的佈局,添加lv_item.xml佈局

 

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

    <ImageView
        android:id="@+id/iv_icon"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:gravity="center"
        />
    <TextView
        android:id="@+id/lv_name"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:text="icon"
        android:gravity="center"
        android:textSize="40sp"
        android:textColor="#1296db"/>
</LinearLayout>

  這裡使用每行一個圖標  一個名稱作為item的內容(對應imageview 和textview)

 

   2.適配器的編寫

  這裡編寫的適配器IconAdapter繼承自BaseAdapterArrayAdapterSimpleAdapter使用度不高

  繼承BaseAdapter抽象類後,要實現父類中的getCount()、getItem()、getItemId()、getView()四個方法。

  系統在繪製ListView之前,將會先調用getCount方法來獲取Item的個數。每繪製一個Item就會調用一次getView方法,在getView中引用事先定義好的layout佈局確定顯示的效果並返回一個View對象作為一個Item顯示出來。

  這兩個方法是自定ListView顯示效果中最為重要的,同時只要重寫好了這兩個方法,ListView就能完全按開發者的要求顯示。而getItem和getItemId方法將會在調用ListView的響應方法的時候被調用到。

  

  創建IconAdapter.java

  ①首先需要一個映射的list,這個list中包含了實體bean,具體就對應了每一個item的內容。用bean封裝了每一個item的所需要的屬性。

  添加IconBean.java

public class IconBean {
    public String IconName;
    public int Icon_Image_Id;

    public String getIconName() {
        return IconName;
    }

    public void setIconName(String iconName) {
        IconName = iconName;
    }

    public int getIcon_Image_Id() {
        return Icon_Image_Id;
    }

    public void setIcon_Image_Id(int icon_Image_Id) {
        Icon_Image_Id = icon_Image_Id;
    }
    
    public IconBean(String s,int image_id){
        IconName=s;
        Icon_Image_Id=image_id;
    }
}

 

  在adapter中添加裝有IconBean的list,此時adapter的代碼如下:

class IconAdapter extends BaseAdapter {

    public List<IconBean> mList;
  public Context mContext;
  public LayoutInflater mLayoutInflater;
    @Override
    public int getCount() {
        return 0;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return null;
    }
}

 

  ②在Adapter中添加構造方法,參數傳入Context及剛纔的List對象

  在之後解析佈局的時候,還需要使用到layoutinflater,所以在構造方法中對它進行初始化。

 public IconAdapter(Context context,List<IconBean> list){
        mContext=context;
        mList=list;
        mLayoutInflater=LayoutInflater.from(context);
    }

  ③修改getcount()、getItem、getItemId()三個方法

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

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

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

  ④修改getView()方法,也是最主要的方法,這裡使用ViewHolder寫法。

  創建ViewHolder靜態類,並完成getView()方法。

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView==null){
            viewHolder=new ViewHolder();
            convertView=mLayoutInflater.inflate(R.layout.lv_item,null);
            viewHolder.mImageView=(ImageView) convertView.findViewById(R.id.iv_icon);
            viewHolder.mTextView=(TextView) convertView.findViewById(R.id.lv_name);
            convertView.setTag(viewHolder);
        }else {
            viewHolder= (ViewHolder) convertView.getTag();
        }
        //從list取出對象
        IconBean bean=mList.get(position);
        //設置item的內容
        viewHolder.mImageView.setImageResource(bean.getIcon_Image_Id());
        viewHolder.mTextView.setText(bean.getIconName());
        return convertView;
    }

    private static class ViewHolder{
        public ImageView mImageView;
        public TextView mTextView;
    }

  此時完成適配器的編寫。

 

  3.在主線程中完成listview的使用

  ①添加listview和對應含有IconBean的映射list並完成初始化。

  

    private List<IconBean> mIconBeenList;

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

        mIconBeenList=new ArrayList<>();
        ListView iconList= (ListView) findViewById(R.id.lv);
    }

  ②添加測試用的數據

    private void initData() {
        IconBean Add=new IconBean("Add",R.drawable.add);
        mIconBeenList.add(Add);
        IconBean Close=new IconBean("Close",R.drawable.close);
        mIconBeenList.add(Close);
        IconBean Enter=new IconBean("Enter",R.drawable.enter);
        mIconBeenList.add(Enter);
        IconBean FullScreen=new IconBean("FullScreen",R.drawable.fullscreen);
        mIconBeenList.add(FullScreen);
        IconBean Right=new IconBean("Right",R.drawable.right);
        mIconBeenList.add(Right);
        mIconBeenList.add(Right);
        mIconBeenList.add(FullScreen);
        mIconBeenList.add(Enter);
        mIconBeenList.add(Close);
        mIconBeenList.add(Add);
    }

  ③為listview添加adapter

        iconList.setAdapter(new IconAdapter(this,mIconBeenList));

  此時完成例子的編寫,MainActivity.java代碼為

public class MainActivity extends AppCompatActivity {

    private List<IconBean> mIconBeenList;

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

        mIconBeenList=new ArrayList<>();
        ListView iconList= (ListView) findViewById(R.id.lv);
        initData();
        iconList.setAdapter(new IconAdapter(this,mIconBeenList));
    }

    private void initData() {
        IconBean Add=new IconBean("Add",R.drawable.add);
        mIconBeenList.add(Add);
        IconBean Close=new IconBean("Close",R.drawable.close);
        mIconBeenList.add(Close);
        IconBean Enter=new IconBean("Enter",R.drawable.enter);
        mIconBeenList.add(Enter);
        IconBean FullScreen=new IconBean("FullScreen",R.drawable.fullscreen);
        mIconBeenList.add(FullScreen);
        IconBean Right=new IconBean("Right",R.drawable.right);
        mIconBeenList.add(Right);
        mIconBeenList.add(Right);
        mIconBeenList.add(FullScreen);
        mIconBeenList.add(Enter);
        mIconBeenList.add(Close);
        mIconBeenList.add(Add);
    }
}

  

 

  大功告成,在模擬器上運行一下

  

 

  項目地址:https://github.com/Lock0nStratos/ListViewTest


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、下載並安裝好FineReport9.0和SQL Server 2016 2、開始——>所有應用——>Microsoft SQL Server 2016——>SQL Server 2016 Master Data Services Configuration Manager(單擊打開) 3、創建數 ...
  • 在資料庫的運用過程中,我們時常會碰到根據身份證號碼來獲取當前的年齡,今天我在這裡寫了一個函數,就是關於獲取年齡的 下麵是函數調用的SQL語句: ...
  • SQL server數據類型 String類型: 數據類型: 描述 存儲 char(n) 固定長度的字元串。最多 8,000 個字元。定義類型為char(5),那麼就表示該類型可以存儲5個字元,即使存入2個字元,剩餘的3個字元也會用空格補齊。 Defined width varchar(n) 可變長 ...
  • 2015年以來,Android開發領域里對熱修複技術的討論和分享越來越多,同時也出現了一些不同的解決方案,如QQ空間補丁方案、阿裡AndFix以及微信Tinker(Bugly sdk也集成Tikner熱更新)和阿裡最新出品Sophix.它們在原理各有不同,適用場景各異。不過從技術上來說多數熱修複框架 ...
  • 簡要:本系列文章講會對expo進行全面的介紹,本人從2017年6月份接觸expo以來,對expo的研究斷斷續續,一路走來將近10個月,廢話不多說,接下來你看到內容,講全部來與官網 我猜去全部機翻+個人修改補充+demo測試的形式,對expo進行一次大補血!歡迎加入expo興趣學習交流群:597732 ...
  • 簡要:本系列文章講會對expo進行全面的介紹,本人從2017年6月份接觸expo以來,對expo的研究斷斷續續,一路走來將近10個月,廢話不多說,接下來你看到內容,講全部來與官網 我猜去全部機翻+個人修改補充+demo測試的形式,對expo進行一次大補血!歡迎加入expo興趣學習交流群:597732 ...
  • Retrofit提供了兩個兩種定義HTTP請求頭欄位的方法即靜態和動態。靜態頭不能改變為不同的請求,頭的鍵和值是固定的且不可改變的,隨著程式的打開便已固定。 動態添加 @HeaderMap 靜態添加 ...
  • 簡要:本系列文章講會對expo進行全面的介紹,本人從2017年6月份接觸expo以來,對expo的研究斷斷續續,一路走來將近10個月,廢話不多說,接下來你看到內容,講全部來與官網 我猜去全部機翻+個人修改補充+demo測試的形式,對expo進行一次大補血!歡迎加入expo興趣學習交流群:597732 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...