欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

AndroidListView中headerview的動(dòng)態(tài)顯示和隱藏的實(shí)現(xiàn)方法

Android ListView中headerview的動(dòng)態(tài)顯示和隱藏的實(shí)現(xiàn)方法

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名申請(qǐng)、網(wǎng)頁(yè)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、蘭州網(wǎng)站維護(hù)、網(wǎng)站推廣。

1.動(dòng)態(tài)設(shè)置headerview的方法

動(dòng)態(tài)設(shè)置headerview有兩個(gè)思路。

方法一

將header的布局寫在list item的布局文件中,在adapter中通過(guò)判斷position的值是否為0動(dòng)態(tài)控制其顯示或隱藏。

代碼示例:

item.xml布局文件

<?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="wrap_content"
  android:background="@drawable/item_selector"
  android:gravity="center_vertical"
  android:orientation="vertical" >
  <include
    android:id="@+id/view_header"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    layout="@layout/view_header"
    android:visibility="gone" />
  <LinearLayout
    android:id="@+id/view_item"
    android:layout_width="match_parent"
    android:layout_height="67dip"
    android:gravity="center_vertical"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:orientation="horizontal" >
    ...

  </LinearLayout>

</LinearLayout>

item.xml中主要分為兩個(gè)部分,上面的view_header是頭header的布局,下面的view_item是普通item的布局,具體的布局內(nèi)容這里省略了。然后在 MyListViewAdapter.Java的getView方法中處理header的顯示問(wèn)題,如果position為0,則顯示header,隱藏普通的item。如果position大于0,則隱藏header,隱藏普通item。

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

      ...

      if (position == 0) {
        holder.mHeader.setVisibility(View.VISIBLE);
        holder.mItem.setVisibility(View.GONE);
        initHeaderView(convertView);
      } else {
        holder.mItem.setVisibility(View.VISIBLE);
        holder.mHeader.setVisibility(View.GONE);
        initNormalView(convertView);
      }
      return convertView;

以此擴(kuò)展,若有兩鐘不同的headview,則新加一個(gè)判斷條件:

 if (position == 0) {
        holder.mHeader.setVisibility(View.VISIBLE);
        holder.mHeader2.setVisibility(View.GONE);
        holder.mItem.setVisibility(View.GONE);
        initHeaderView(convertView);
      } else if(position == 1){
        holder.mHeader.setVisibility(View.GONE);
        holder.mHeader2.setVisibility(View.VISIBLE);
        holder.mItem.setVisibility(View.GONE);
        initHeaderView2(convertView);
      }else {
        holder.mItem.setVisibility(View.VISIBLE);
        holder.mHeader.setVisibility(View.GONE);
        holder.mHeader2.setVisibility(View.GONE);
        initNormalView(convertView);
      }

方法二

使用listview提供的addHeaderView

為了動(dòng)態(tài)顯示和隱藏header,按照慣例,誤以為直接通過(guò)setVisibility中的View.GONE就可以實(shí)現(xiàn)。但是在實(shí)際使用中發(fā)現(xiàn)并不是這樣的。例如:

private View mHeader;
mHeader = LayoutInflater.from(this).inflate(R.layout.header, null); //加載footer的布局
mListView.addHeaderView(mHeader);

如果想動(dòng)態(tài)隱藏這個(gè)header,慣性思維是直接設(shè)置header為gone:(其實(shí)這樣做是不對(duì)的)

mHeader.setVisibility(View.GONE); //隱藏header

實(shí)際上,直接設(shè)置GONE后,雖然元素是隱藏了,但是還是占用著那個(gè)區(qū)域,此時(shí)和View.INVISIBILE效果一樣。

解決辦法是,在header布局文件的最外層再套一層LinearLayout/RelativeLayout,這里稱為headerParent。隱藏時(shí)隱藏mHeader,而不是headerParent。

view_header.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/mHeaderparent"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:background="#FFFFFF"
  android:gravity="center"
  android:orientation="vertical"
  >
  <LinearLayout
    android:id="@+id/mHeader"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center">

    ...

  </LinearLayout>
</LinearLayout>

加載header和headerParent的布局:

MainActivity.java中關(guān)鍵代碼展示

private View mHeader; //header
private View mHeaderParent; //header的最外面再套一層LinearLayout

mHeaderParent = LayoutInflater.from(getActivity()).inflate(R.layout.headerparent_listview, null);//加載footerParent布局
mHeader = mHeaderParent.findViewById(R.id.header);
listView.addHeaderView(mHeaderParent); //把mHeaderParent放到ListView當(dāng)中
mHeaderParent.setOnClickListener(MainActivity.this); 

設(shè)置header為gone:(不是設(shè)置headerParent為gone)

mHeader.setVisibility(View.GONE);

該方法有一點(diǎn)需要注意的是:listView.addHeaderView()方法必須在setAdapter()方法前調(diào)用,否則就會(huì)拋異常。

ListView listView = xxxx; 
 listView.addHeaderView(mHeaderParent); 
 listView.setAdapter(adapter); 
 mHeader.setVisibility(View.GONE);

以上兩種方法各有優(yōu)劣,個(gè)人傾向于第二種方法,第一種的耦合性太強(qiáng)了,并且由于將header布局與普通item布局合在一起,另外每次顯示時(shí)額外增加了一次position的條件判斷,在性能上有些額外的消耗。

2.引入headerview帶來(lái)的問(wèn)題

當(dāng)引入headerview之后,可能會(huì)引起OnItemClickListener的position移位問(wèn)題。

position通常是從0開(kāi)始的,但是添加了HeaderView之后,position也會(huì)將HeaderView的數(shù)目計(jì)算進(jìn)去。

這里提供以下兩種解決辦法:

(1).手動(dòng)計(jì)算真實(shí)的position位置:

final headerCount = 1;
mListView.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> parent, View view,
      int position, long id) {
    Item item = myAdapter.getItem(position - headerCount);
  }
});

(2).ListView已經(jīng)為我們提供了數(shù)據(jù)的綁定:

mListView.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> parent, View view,
      int position, long id) {
    Item item = parent.getAdapter().getItem(position);
  }
});

 如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

網(wǎng)頁(yè)名稱:AndroidListView中headerview的動(dòng)態(tài)顯示和隱藏的實(shí)現(xiàn)方法
文章起源:http://aaarwkj.com/article8/peijop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、外貿(mào)建站品牌網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)移動(dòng)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管
亚洲香蕉在线视频免费| 久久久久久亚洲精品少妇| 国产91在线精品超碰人人| 国产又粗又猛又爽黄老大爷| 国产精品1区2区久久久| 久久好大好爽要死了欧美| 日本乱一区二区三区在线| 欧美精品成人免费在线| 蜜桃av网站在线播放| 狠狠综爱五月天的婷婷| 国产综合中文字幕不卡| 日韩特级黄片在线免费观看| 激情av一区二区不卡| 91麻豆精品国产自产| 欧洲精品亚洲精品日韩专区| 麻豆一精品传二传媒短视频 | 亚洲国产在线一区二区| 日韩在线不卡免费视频一区| 人妻熟妇一区二区三区成人| 国产精品大全中文字幕| 午夜视频免费看一区二区| 亚洲精品a在线观看av| 男同午夜视频在线观看| 成年爽片在线观看播放欧美| 亚洲精品丝袜成人偷拍| 国产高清在线不卡一区| 国产三级在线视频不卡| 尤物在线观看精品视频| 日韩三级成人在线视频 | 欧亚日韩精品一区二区在线| 蜜桃国产精品视频网站| 亚洲视频免费在线一区| 欧美精品福利一区二区三区| 高潮的毛片激情久久精品| 日韩不卡在线观看免费| 亚洲一区二区视频在线播放| 午夜啪视频免费在线观看| 国产剧情av在线资源| 一区二区三区人妻系列| 国产区青青操自拍视频| av永久天堂一区二区三区|