Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發-ListView的使用

Android開發-ListView的使用

編輯:關於Android編程

  • ListView在android程序中比較常用,在此做一下簡單的總結
  • 內容:自定義ListView, 自定義Adapter,ListView滾動事件的應用!

項目結構如下圖

ListView的使用:

建立一個listView的布局文件,命名為:item_layout.xml:


    
        
        
            
            
        

大致視圖如下

 

創建一個自定義ListView的布局文件:activity_main.xml



    
    
建立一個Entity,命名為:PersonEntiry.java,用於顯示
package com.example.linux.listviewscrolltest.linux;

/**
 * Created by Linux on 2016/3/13.
 */
public class PersonEntiry {
    private int imageId;
    private String username;
    private String password;
    private String button;

    public int getImageId() {
        return imageId;
    }

    public void setImageId(int imageId) {
        this.imageId = imageId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getButton() {
        return button;
    }

    public void setButton(String button) {
        this.button = button;
    }
}
建立一個Holder,命名為:PersonViewHolder.java,對應於布局文件中的四個組件
package com.example.linux.listviewscrolltest.linux;

import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * Created by Linux on 2016/3/13.
 */
public class PersonViewHolder {
    ImageView imageView;

    TextView textView1;

    TextView textView2;

    Button button;
}
創建一個ListView的適配器,命名為PersonAdapter.java, 重寫父類的四個方法:
package com.example.linux.listviewscrolltest.linux;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.linux.listviewscrolltest.R;

import java.util.List;

/**
 * Created by 胡紅翔 on 2016/3/13.
 * function: 自定義ListView的適配器
 *
 */
public class PersonAdapter extends BaseAdapter {
    List personEntiries;
    LayoutInflater inflater;

    public PersonAdapter(Context context, List personEntiries) {
        this.personEntiries = personEntiries;
        this.inflater = LayoutInflater.from(context);
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        PersonEntiry entity = personEntiries.get(position);
        PersonViewHolder holder;
        if (convertView == null) {
            holder = new PersonViewHolder();
            convertView = inflater.inflate(R.layout.item_layout, null);
            holder.imageView = (ImageView) convertView.findViewById(R.id.imageView);
            holder.textView1 = (TextView) convertView.findViewById(R.id.textView1);
            holder.textView2 = (TextView) convertView.findViewById(R.id.textView2);
            holder.button = (Button) convertView.findViewById(R.id.button);
            convertView.setTag(holder);
        } else {
            holder = (PersonViewHolder) convertView.getTag();
        }
        holder.imageView.setImageResource(entity.getImageId());
        holder.textView1.setText(entity.getUsername());
        holder.textView2.setText(entity.getPassword());
        holder.button.setText(entity.getButton());
        return convertView;
    }
}
創建一個自定義的ListView:CustomListView,添加滾動事件:
package com.example.linux.listviewscrolltest.linux;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.AbsListView;
import android.widget.ListView;

/**
 * Created by Linux on 2016/3/13.
 * function: 自定義的ListView
 */
public class CustomListView extends ListView implements AbsListView.OnScrollListener {
    private static final String TAG = "MainActivity";

    public CustomListView(Context context) {
        super(context);
        setOnScrollListener(this);
    }

    public CustomListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setOnScrollListener(this);
    }

    public CustomListView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setOnScrollListener(this);
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        // view應該就是可見的View的集合
        Log.i(TAG, "state change: " + scrollState + ", view size: " + view.getChildCount());
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        Log.i(TAG, "on scroll: " + firstVisibleItem + ", visible: " + visibleItemCount + " , " + totalItemCount);
    }
}
最後在MainActivity中使用自定義的ListView:
package com.example.linux.listviewscrolltest;
import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import com.example.linux.listviewscrolltest.linux.CustomListView;import com.example.linux.listviewscrolltest.linux.PersonAdapter;import com.example.linux.listviewscrolltest.linux.PersonEntiry;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private CustomListView listView; private PersonAdapter personAdapter; private List personEntiries = new ArrayList<>(); private PersonEntiry entity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (CustomListView) findViewById(R.id.listView); setData(); initListView(); } // 增加數據 private void setData() { for (int i = 0; i < 10; i++) { entity = new PersonEntiry(); entity.setImageId(R.mipmap.ic_launcher); entity.setUsername("linux: " + i); entity.setPassword("huhx: " + i); entity.setButton("劉力: " + i); personEntiries.add(entity); } } // 生成ListView private void initListView() { personAdapter = new PersonAdapter(this, personEntiries); listView.setAdapter(personAdapter); }}
為測試方便,附上AndroidManifest.xml



    
        
            
                

                
            
        
    

 

實現過程

ListView中比較重要的幾個要素:

  • 數據:
  • 適配器adapter:
  • listview:

然後,根據適配器的種類,我們可以把listview分成三種,有ArrayAdapter,SimpleAdapter和SimpleCursorAdapter,而最後一種是專門與數據庫連接用的。

說起數據適配器 :

顧名思義,就是把一些數據給弄得適當,適合以便於在View上顯示。可以看作是
 界面數據綁定的一種理解。它所操縱的數據一般都是一些比較復雜的數據,如數組,鏈表,
 數據庫,集合等。
適配器就像顯示器,把復雜的東西按人可以接受的方式來展現。
 那麼適配器是怎麼處理得到的數據,並把它顯示出來的呢。其實很簡單,說白了適配器它也
 是一個類,在類裡面它實現了父類的這幾個方法:
                        publicint getCount() //得到數據的行數
                        public Object getItem(int position)//根據position得到某一行的記錄
              public long getItemId(int position)//的到某一條記錄的ID
               //下面這個方法是最重要的相比於其它幾個方法,它顯式的定義了,適配器將要 以什麼樣的
              //方式去顯示我們所填充的數據,在自定義的適配器裡面我們通常會給它寫個布局文件
             publicView getView(int position, View convertView, ViewGroup parent)  
               我們常用的適配器一共有三個:ArrayAdapter,SimpleAdapter,SimpleCursorAdapter 這三個,他們都是繼承於BaseAdapter     下面貼上一個自己簡單封裝的適配器代碼:
public abstract class MyBaseAdapater extends BaseAdapter { private List list = new ArrayList(); public MyBaseAdapater(List list) { super(); this.list = list; } // 返回行數 @Override public int getCount() { return list.size(); } // 返回指定下標的實例 @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } // 返回 行視圖 顯示指定下標的數據 具體由子類去實現 @Override public abstract View getView(int position, View convertView, ViewGroup parent); } 
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved