国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ListView 使用詳解

clasnake / 609人閱讀

極力推薦文章:歡迎收藏
Android 干貨分享

閱讀五分鐘,每日十點(diǎn),和您一起終身學(xué)習(xí),這里是程序員Android

本篇文章主要介紹 Android 開發(fā)中的部分知識(shí)點(diǎn),通過閱讀本篇文章,您將收獲以下內(nèi)容:

ListView主要使用方法

使用android:entries 為L(zhǎng)istView準(zhǔn)備數(shù)據(jù)

使用List 為L(zhǎng)istView 準(zhǔn)備數(shù)據(jù)

為L(zhǎng)istView 添加頭,尾,以及空布局

使用SimpleAdapter 為L(zhǎng)istview 適配圖文

使用BaseAdapter 為L(zhǎng)istview適配圖文

ListView 分類顯示

ListViewAndroid 中顯示數(shù)據(jù)常用的控件之一,主要用于顯示一個(gè)垂直滾動(dòng)的數(shù)據(jù)集合,隨著Android 手機(jī)對(duì)性能要求越來越高,一個(gè)更現(xiàn)代,更靈活,顯示列表性能更優(yōu)異的RecyclerView將會(huì)逐漸取代ListView的數(shù)據(jù)顯示方式,但是目前為止,ListView 在開發(fā)中還是十分常見的,并未被棄用。

ListView 簡(jiǎn)介 ListView 繼承關(guān)系如下:
java.lang.Object
   ?    android.view.View
        ?    android.view.ViewGroup
             ?    android.widget.AdapterView
                  ?    android.widget.AbsListView
                       ?    android.widget.ListView
ListView 常用XML屬性
ListView XML常用屬性如下:

android:divider

android:dividerHeight

android:entries

android:footerDividersEnabled

android:headerDividersEnabled

1.ListView主要使用方法如下:

ListView 常用來顯示同分類數(shù)據(jù),常用使用方法如下:

1. 準(zhǔn)備數(shù)據(jù)源
    List mAddHeaderFooterList = new ArrayList();
2.將數(shù)據(jù)源添加到適配器中
        ArrayAdapter adapter = new ArrayAdapter(this, 
                               android.R.layout.simple_list_item_1, mAddHeaderFooterList);
3. 將適配器中的數(shù)據(jù)添加到ListView 中
        mListView.setAdapter(adapter);

# 2. 使用android:entries 為L(zhǎng)istView準(zhǔn)備數(shù)據(jù)

實(shí)現(xiàn)效果如下

實(shí)現(xiàn)代碼如下

Listview標(biāo)簽中直接用數(shù)組為ListView 填充數(shù)據(jù)
entries 屬性使用方法:

    

填充數(shù)據(jù)如下

array 數(shù)組資源

    
        北京
        上海
        廣州
        深圳
        鄭州
        成都
    

# 3. 使用List 為L(zhǎng)istView 準(zhǔn)備數(shù)據(jù)

實(shí)現(xiàn)效果如下

部分實(shí)現(xiàn)代碼如下:

    public void ListViewArrayList(View view) {

        ClearAllView();
        mListViewArray.setVisibility(View.VISIBLE);
        // 1.準(zhǔn)備數(shù)據(jù)源
        final String[] citys = getResources().getStringArray(R.array.citys);
        // 2.將數(shù)據(jù)源加載到適配器中
        // ArrayAdapter adapter = new ArrayAdapter(ListViewMethods.this,
        // android.R.layout.simple_expandable_list_item_1, citys);
        // 3.將適配器中的數(shù)據(jù)加載到ListView控件中

        mArrayList = Arrays.asList(citys);
        ArrayAdapter adapter = new ArrayAdapter(ListViewMethods.this,
                android.R.layout.simple_expandable_list_item_1, mArrayList);

        mListViewArray.setAdapter(adapter);

    }

# 4. 為L(zhǎng)istView 添加頭,尾,以及空布局

實(shí)現(xiàn)效果如下

主要方法如下:

1. 添加頭布局方法
ListView.addHeaderView(View)
2.添加尾布局方法
ListView.addFooterView(View)
3. ListView數(shù)據(jù)為空時(shí), 設(shè)置空布局方法
ListView.setEmptyView(View)

效果圖實(shí)現(xiàn)代碼如下

    public void ListViewHAddHeaderFooter(View view) {
        ClearAllView();
        mListAddHeadFooter.setVisibility(View.VISIBLE);

        // 準(zhǔn)備數(shù)據(jù)源
        mAddHeaderFooterList = new ArrayList();

        for (int i = 0; i < 6; i++) {
            mAddHeaderFooterList.add("測(cè)試" + i);
        }
        // 將數(shù)據(jù)源添加到適配器中
        final ArrayAdapter adapter = new ArrayAdapter(
                ListViewMethods.this, android.R.layout.simple_list_item_1,
                mAddHeaderFooterList);
        // 添加listview 頭
        imageHeader = new ImageView(this);
        imageHeader.setLayoutParams(new AbsListView.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
        imageHeader.setImageResource(R.drawable.gril);
        imageHeader.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int index = mAddHeaderFooterList.size();
                for (int i = index; i < index + 20; i++) {
                    mAddHeaderFooterList.add("加載更多數(shù)據(jù)內(nèi)容" + i);
                }
                adapter.notifyDataSetChanged();
            }
        });
        mListAddHeadFooter.addHeaderView(imageHeader);

        // 添加listview 尾
        btnFooter = new Button(this);
        btnFooter.setLayoutParams(new AbsListView.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
        btnFooter.setText("點(diǎn)擊加載更多");
        btnFooter.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                int index = mAddHeaderFooterList.size();
                for (int i = index; i < index + 20; i++) {
                    mAddHeaderFooterList.add("加載更多" + i);
                }
                adapter.notifyDataSetChanged();
            }
        });
        mListAddHeadFooter.addFooterView(btnFooter);

        TextView tv = new TextView(this);
        tv.setLayoutParams(new AbsListView.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.WRAP_CONTENT));
        tv.setText("數(shù)據(jù)為空");
        mListAddHeadFooter.setEmptyView(tv);

        // 將適配器中的數(shù)據(jù)添加到ListView 中
        mListAddHeadFooter.setAdapter(adapter);
    }
5. 使用SimpleAdapter 為L(zhǎng)istview 適配圖文

實(shí)現(xiàn)效果如下

實(shí)現(xiàn)代碼如下

    public void ListViewSimpleAdapter(View view) {
        ClearAllView();
        mListViewSimple.setVisibility(View.VISIBLE);
        int[] images = { R.drawable.gril, R.drawable.ic_launcher,
                R.drawable.gril, R.drawable.ic_launcher, R.drawable.gril,
                R.drawable.ic_launcher, R.drawable.gril,
                R.drawable.ic_launcher, R.drawable.gril, };

        mSimpleList = new ArrayList();
        // 準(zhǔn)備數(shù)據(jù)
        for (int i = 0; i < images.length; i++) {
            Map map = new HashMap();
            map.put("img", images[i]);
            map.put("text", "item" + i);
            mSimpleList.add(map);
        }

        /**
         * 將數(shù)據(jù)源的數(shù)據(jù)加載到適配器中 SimpleAdapter context: 上下文對(duì)象 data:表示加載到適配器中的數(shù)據(jù)對(duì)象
         * resource: 表示adapter控件中每項(xiàng)資源id from:表示數(shù)據(jù)源map 中key 的數(shù)組,表示key指定的值
         * to:表示需要展示對(duì)應(yīng)數(shù)據(jù)的控件資源id
         * 
         * 通過from 和to的對(duì)應(yīng),將from 中key值對(duì)應(yīng)的數(shù)據(jù)指定的顯示到to 指定資源id的控件中
         * 
         * **/

        SimpleAdapter adapter = new SimpleAdapter(ListViewMethods.this,
                mSimpleList, R.layout.listview_item_img_tv, new String[] {
                        "img", "text" }, new int[] { R.id.img, R.id.tv });
        // 將適配器中的數(shù)據(jù)添加到控件中
        mListViewSimple.setAdapter(adapter);
    }

使用的item 布局如下




    

    
6. 使用BaseAdapter 為L(zhǎng)istview適配圖文

實(shí)現(xiàn)效果如下


-實(shí)現(xiàn)代碼如下

    public void ListViewBaseAdapter(View view) {
        ClearAllView();
        mListViewBase.setVisibility(View.VISIBLE);

        mBaseAdapterList = new ArrayList>();
        int[] images = { R.drawable.gril, R.drawable.ic_launcher,
                R.drawable.gril, R.drawable.ic_launcher, R.drawable.gril,
                R.drawable.ic_launcher, R.drawable.gril,
                R.drawable.ic_launcher, R.drawable.gril, };

        for (int i = 0; i < images.length; i++) {
            Map map = new HashMap();
            map.put("img", images[i]);
            map.put("text", "數(shù)據(jù)" + i);
            mBaseAdapterList.add(map);
        }

        MyBaseAdapter adapter = new MyBaseAdapter();
        mListViewBase.setAdapter(adapter);

    }

自定義適配器實(shí)現(xiàn)的方法

    class MyBaseAdapter extends BaseAdapter {

        // 當(dāng)前適配器中加載數(shù)據(jù)的總條目
        @Override
        public int getCount() {
            return mBaseAdapterList.size();
        }

        // 根據(jù)指定下標(biāo)獲取對(duì)應(yīng)item 的view
        @Override
        public Object getItem(int position) {
            return mBaseAdapterList.get(position);
        }

        // 根據(jù)指定下標(biāo)獲取當(dāng)前item的id
        @Override
        public long getItemId(int position) {
            return position;
        }

        /**
         * 獲取適配器控件中的View對(duì)象,得到用于展示數(shù)據(jù)的視圖 int position,:當(dāng)前item的下標(biāo) View convertView,
         * 表示可復(fù)用的View ViewGroup parent 當(dāng)前繪制的item 所屬的listview
         */

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            // 表示第一次運(yùn)行創(chuàng)建,否則復(fù)用view
            if (convertView == null) {

                convertView = LayoutInflater.from(ListViewMethods.this)
                        .inflate(R.layout.listview_item_img_tv, null);
                mHolder = new Holder();
                mHolder.tv = (TextView) convertView.findViewById(R.id.tv);
                mHolder.img = (ImageView) convertView.findViewById(R.id.img);
                convertView.setTag(mHolder);

            } else {
                // 進(jìn)行復(fù)用
                mHolder = (Holder) convertView.getTag();
            }

            mHolder.tv.setText((String) mBaseAdapterList.get(position).get(
                    "text"));
            mHolder.img.setImageResource((Integer) mBaseAdapterList.get(
                    position).get("img"));

            return convertView;
        }
    }

    class Holder {
        public TextView tv;
        public ImageView img;

    }

使用的item 布局如下




    

    
7. ListView 分類顯示

實(shí)現(xiàn)效果如下:

實(shí)現(xiàn)代碼如下:

    public void ListViewTypeBaseAdapter(View view) {
        ClearAllView();
        mListViewType.setVisibility(View.VISIBLE);

        MyTypeBaseAdapter myTypeBaseAdapter = new MyTypeBaseAdapter();
        mListViewType.setAdapter(myTypeBaseAdapter);

    }

    class MyTypeBaseAdapter extends BaseAdapter {
        private String[] tittles = { "分類一 :水果", "分類二 :蔬菜" };
        private String[] mTypeOneList = { "蘋果", "香蕉", "梨", "西瓜", "菠蘿" };
        private String[] mTypeTwoList = { "番茄", "土豆", "大蔥", "辣椒", "蓮藕", "白菜",
                "蘿卜", "豆角", "芹菜", "茄子" };
        int[] typeOneImages = { R.drawable.gril, R.drawable.ic_launcher,
                R.drawable.gril, R.drawable.ic_launcher, R.drawable.gril };
        int[] typeTwoImages = { R.drawable.gril, R.drawable.ic_launcher,
                R.drawable.gril, R.drawable.ic_launcher, R.drawable.gril,
                R.drawable.gril, R.drawable.ic_launcher, R.drawable.gril,
                R.drawable.ic_launcher, R.drawable.gril };

        @Override
        public int getCount() {
            return mTypeOneList.length + mTypeTwoList.length + 2;
        }

        @Override
        public Object getItem(int position) {
            if (position == 0 || position == mTypeOneList.length + 1) {
                return 0;
            } else {
                if (position < mTypeOneList.length + 1) {
                    return mTypeOneList[position];
                } else {
                    return mTypeTwoList[position - mTypeOneList.length - 2];
                }

            }
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            int mode = getItemViewType(position);
            if (mode == 0) {
                ViewTitleHolder holder = null;
                if (convertView == null) {
                    convertView = View.inflate(getApplicationContext(),
                            R.layout.listview_type_tv, null);
                    holder = new ViewTitleHolder();
                    holder.textView = (TextView) convertView
                            .findViewById(R.id.tv);
                    convertView.setTag(holder);
                } else {
                    holder = (ViewTitleHolder) convertView.getTag();
                }

                if (position == 0) {
                    holder.textView.setText(tittles[position]);
                } else {
                    holder.textView.setText(tittles[1]);
                }

                return convertView;

            } else {
                ViewHolder holder = null;
                if (convertView == null) {
                    convertView = View.inflate(getApplicationContext(),
                            R.layout.listview_item_img_tv, null);
                    holder = new ViewHolder();
                    holder.imageView = (ImageView) convertView
                            .findViewById(R.id.img);
                    holder.textView = (TextView) convertView
                            .findViewById(R.id.tv);

                    convertView.setTag(holder);
                } else {
                    holder = (ViewHolder) convertView.getTag();
                }
                if (position < mTypeOneList.length + 1) {
                    holder.textView.setText(mTypeOneList[position - 1]);
                    holder.imageView
                            .setImageResource(typeOneImages[position - 1]);
                } else {
                    holder.textView.setText(mTypeTwoList[position
                            - mTypeOneList.length - 2]);
                    holder.imageView.setImageResource(typeTwoImages[position
                            - mTypeOneList.length - 2]);
                }

                return convertView;
            }

        }

        @Override
        public int getItemViewType(int position) {
            if (position == 0 || position == mTypeOneList.length + 1) {
                return 0;
            } else {
                return 1;
            }
        }

        @Override
        public int getViewTypeCount() {
            return super.getViewTypeCount() + 1;
        }
    }

    static class ViewHolder {
        ImageView imageView;
        TextView textView;

    }

    static class ViewTitleHolder {
        TextView textView;
    }

使用的item 布局如下



    

至此,本篇已結(jié)束,如有不對(duì)的地方,歡迎您的建議與指正。同時(shí)期待您的關(guān)注,感謝您的閱讀,謝謝!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/75849.html

相關(guān)文章

  • GridView 使用詳解

    摘要:簡(jiǎn)介繼承關(guān)系如下主要使用方法主要通過使用自定義來適配數(shù)據(jù),進(jìn)而顯示到中。如果不是太明白,可以查看上篇文章使用詳解至此,本篇已結(jié)束,如有不對(duì)的地方,歡迎您的建議與指正。同時(shí)期待您的關(guān)注,感謝您的閱讀,謝謝 極力推薦文章:歡迎收藏Android 干貨分享 showImg(https://segmentfault.com/img/remote/1460000019975020); 閱讀五分...

    dayday_up 評(píng)論0 收藏0
  • Django 學(xué)習(xí)小組:基于類的通用視圖詳解(一)

    摘要:本教程首先介紹兩個(gè)項(xiàng)目中遇到的通用視圖和。語句的作用是添加了到上下文中,還要把默認(rèn)的一些上下文變量也返回給視圖函數(shù),以便其后續(xù)處理。 通過三周的時(shí)間我們開發(fā)了一個(gè)簡(jiǎn)單的個(gè)人 Blog,教程地址: 第一周:Django 學(xué)習(xí)小組:博客開發(fā)實(shí)戰(zhàn)第一周教程 —— 編寫博客的 Model 和首頁面 第二周:Django 學(xué)習(xí)小組:博客開發(fā)實(shí)戰(zhàn)第二周教程 —— 博客詳情頁面和分類頁面 第三周:D...

    atinosun 評(píng)論0 收藏0
  • ContentProvider 使用詳解

    摘要:獲取短信內(nèi)容的方法短信內(nèi)容數(shù)據(jù)也是系統(tǒng)提供的,獲取方法如下獲取方法如下微信公眾號(hào)程序員插入數(shù)據(jù)測(cè)試數(shù)據(jù)中。。。。。 showImg(https://segmentfault.com/img/remote/1460000019975019?w=157&h=54); 極力推薦文章:歡迎收藏Android 干貨分享 showImg(https://segmentfault.com/img/...

    DirtyMind 評(píng)論0 收藏0
  • javascript 觀察者(發(fā)布訂閱)模式詳解

    摘要:寫給讀者的話本人是千千萬萬前端小白中的一員,所以對(duì)前端小白的痛苦感同身受,面對(duì)一個(gè)新的知識(shí)點(diǎn),很多時(shí)候感到束手無策。 寫給讀者的話 本人是千千萬萬前端小白中的一員,所以對(duì)前端小白的痛苦感同身受,面對(duì)一個(gè)新的知識(shí)點(diǎn),很多時(shí)候感到束手無策。網(wǎng)上搜資料,有的不全,有的看不懂,所以本人作為小白,很有義務(wù)將自己覺得理解了的知識(shí)點(diǎn)盡可能的解釋的通熟易懂,恨不得一個(gè)字一個(gè)字的解釋。但是別人的終究是別...

    anonymoussf 評(píng)論0 收藏0
  • Flutter完整開發(fā)實(shí)戰(zhàn)詳解(十三、全面深入觸摸和滑動(dòng)原理)

    摘要:如果沒有碰撞結(jié)果,那么通過將事件分發(fā)到全局處理。提供手勢(shì)事件競(jìng)技信息的實(shí)體,內(nèi)封裝參與事件競(jìng)技的成員。這樣勝利的會(huì)通過回調(diào)到中,設(shè)置為標(biāo)志為勝利區(qū)域,然后執(zhí)行和發(fā)出事件響應(yīng)觸發(fā)給這個(gè)控件。本篇將帶你深入了解 Flutter 中的手勢(shì)事件傳遞、事件分發(fā)、事件沖突競(jìng)爭(zhēng),滑動(dòng)流暢等等的原理,幫你構(gòu)建一個(gè)完整的 Flutter 閉環(huán)手勢(shì)知識(shí)體系,這也許是目前最全面的手勢(shì)事件和滑動(dòng)源碼的深入文章了。 ...

    garfileo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<