Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android-ListView兩種適配器以及事件監聽

Android-ListView兩種適配器以及事件監聽

編輯:關於Android編程

Android-ListView兩種適配器


ListView在安卓App中非常常見,幾乎每一個App都會有涉及,比如QQ消息列表,或者是
通訊錄還有就是酷我音樂的歌曲列表都是ListView、繼承ListView。所以非常重要。
這裡寫圖片描述
這就是ListView


ArrayAdapter<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjxiciAvPg0Kyv2+3dS0ysfK/b7du/LV37yvus+jrLHIvc+88rWlPGJyIC8+DQqyvL7WzsS8/jwvcD4NCjxwcmUgY2xhc3M9"brush:java;">

主活動:

package com.xieth.as.listviewdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends AppCompatActivity {

    private ListView listView = null;
    private ArrayAdapter arr_adapter = null;
    private SimpleAdapter sim_adapter = null;

    // arrayAdapter的數據源
    private String[] data = {"軟件技術", "網絡技術", "信息技術", "計算機應用技術", "軟件工程技術", "項目文檔寫作"};

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

        initViews();
        eventsViews();
    }

    private void eventsViews() {
        // 構造適配器
        arr_adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, data);
        // 加載適配器
        listView.setAdapter(arr_adapter);
    }

    private void initViews() {
        listView = (ListView) findViewById(R.id.id_listview);
    }

}

運行效果:
這裡寫圖片描述


SimpleAdapter
數據源是集合裡面包含著哈希表。
那麼使用SimpleAdapter就不使用安卓自帶的布局,我們要自定義一個布局文件。
listview_item.xml




    

    

主活動:

package com.xieth.as.listviewdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {

    private ListView listView = null;
    private ArrayAdapter arr_adapter = null;
    private SimpleAdapter sim_adapter = null;

    // arrayAdapter的數據源
    private String[] data = {"軟件技術", "網絡技術", "信息技術", "計算機應用技術", "軟件工程技術", "項目文檔寫作"};

    // SimpleAdapter的數據源
    private int[] picId = {R.mipmap.chat_tool_audio, R.mipmap.chat_tool_camera, R.mipmap.chat_tool_location
            ,R.mipmap.chat_tool_photo, R.mipmap.chat_tool_send_file, R.mipmap.chat_tool_video};
    private List> dataList = null;

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

        initViews();
        eventsViews();
    }

    private List> getDara(){
        for (int i = 0; i < picId.length; i++) {
            Map map = new HashMap<>();
            map.put("pic", picId[i]);
            map.put("text", "這是描述" + i);
            dataList.add(map);
        }
        return dataList;
    }


    private void eventsViews() {
        // 構造適配器
        arr_adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, data);
        // 加載適配器
        //listView.setAdapter(arr_adapter);

        // SimpleAdapter
        sim_adapter = new SimpleAdapter(this, getDara(), R.layout.listview_item,
                    new String[] {"pic", "text"}, new int[] {R.id.id_image, R.id.id_text});
        listView.setAdapter(sim_adapter);
    }

    private void initViews() {
        listView = (ListView) findViewById(R.id.id_listview);
        dataList = new ArrayList>();
    }

}

運行效果:
這裡寫圖片描述


監聽ListView的Item選項事件


實現AdapterView.OnItemClickListener, AbsListView.OnScrollListener
選項點擊事件和ListView滾動事件

 // 監聽事件
 listView.setOnItemClickListener(this);
 listView.setOnScrollListener(this);

實現點擊事件的方法

    // 點擊事件
    @Override
    public void onItemClick(AdapterView parent, View view, int position, long id) {
        String text = listView.getItemAtPosition(position)+"";
        Toast.makeText(this, "position->" + position + "\ntext->" +                                                    text,Toast.LENGTH_SHORT).show();
    }

運行效果:
這裡寫圖片描述


然後就是滾動事件,所以增加幾個選項:

private List> getDara(){
        for (int i = 0, t = 0; t < picId.length*2; i++, t++) {
            Map map = new HashMap<>();
            if (i >= picId.length) i = i/10;
            map.put("pic", picId[i]);
            map.put("text", "這是描述" + t);
            dataList.add(map);
        }
        return dataList;
    }

效果:
這裡寫圖片描述


AbsListView.OnScrollListener滾動事件
首先呢,ListView的滾動有三種狀態
1:靜止狀態,SCROLL_STATE_IDLE
2:手指滾動狀態,SCROLL_STATE_TOUCH_SCROLL
3:手指不動了,但是屏幕還在滾動狀態,也就是力道還在,依靠慣性。SCROLL_STATE_FLING


//滾動事件

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        switch (scrollState) {
            case SCROLL_STATE_FLING:
                Toast.makeText(this, "慣性在動", Toast.LENGTH_SHORT).show();
                break;
            case SCROLL_STATE_IDLE:
                Toast.makeText(this, "停止滑動", Toast.LENGTH_SHORT).show();
                break;
            case SCROLL_STATE_TOUCH_SCROLL:
                Toast.makeText(this, "手指在滑動", Toast.LENGTH_SHORT).show();
                break;
        }
    }

運行效果:
這裡寫圖片描述
可以看到,我首先是用鼠標點住滑動,然後停止,第二次是用力拉動,分別打印出手指滑動,慣性在動,到
最後的停止滑動。


為了更加直觀的顯示,可以刷新ListView的列表項。


    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        boolean f = false;
        switch (scrollState) {
            case SCROLL_STATE_FLING:
                break;
            case SCROLL_STATE_IDLE:
                // 判斷滾動到底部
                if (view.getLastVisiblePosition() == (view.getCount() - 1)) {
                    f = true;
                }
                break;
            case SCROLL_STATE_TOUCH_SCROLL:
                if (f) {
                    Map map = new HashMap<>();
                    map.put("pic", R.mipmap.chat_tool_audio);
                    map.put("text", "這是新增加的選項");
                    dataList.add(map);
                    sim_adapter.notifyDataSetChanged();
                }
                break;
        }
    }

運行效果:
這裡寫圖片描述
明顯看到刷新並且成功增加選項,這就是滾動事件的監聽。


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved