1. 程式人生 > >android之listview點選item展開內容

android之listview點選item展開內容

本文轉載自:

http://blog.csdn.net/baidu_nod/article/details/38610749

  1. import java.util.ArrayList;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.view.LayoutInflater;  
  5. import android.view.MotionEvent;  
  6. import android.view.View;  
  7. import android.view.View.OnTouchListener;  
  8. import android.view.ViewGroup;  
  9. import android.widget.AdapterView;  
  10. import android.widget.AdapterView.OnItemClickListener;  
  11. import android.widget.ArrayAdapter;  
  12. import android.widget.BaseAdapter;  
  13. import android.widget.Button;  
  14. import android.widget.ListView;  
  15. import android.widget.RelativeLayout;  
  16. import android.widget.TextView;  
  17. publicclass MainActivity extends Activity {  
  18.     private ArrayList<MyData> myList = new ArrayList<MyData>();  
  19.     private myAdapter myAdapter;  
  20.     private LayoutInflater inflater = null;  
  21.     privateint oldPostion = -1;  
  22.     @Override
  23.     protectedvoid onCreate(Bundle savedInstanceState) {  
  24.         super.onCreate(savedInstanceState);  
  25.         setContentView(R.layout.activity_main);  
  26.         final ListView list = (ListView) findViewById(R.id.draggable_list);  
  27.         MyData data = new MyData();  
  28.         data.name = "11";  
  29.         myList.add(data);  
  30.         data = new MyData();  
  31.         data.name = "22";  
  32.         myList.add(data);  
  33.         data = new MyData();  
  34.         data.name = "33";  
  35.         myList.add(data);  
  36.         data = new MyData();  
  37.         data.name = "44";  
  38.         myList.add(data);  
  39.         data = new MyData();  
  40.         data.name = "55";  
  41.         myList.add(data);  
  42.         data = new MyData();  
  43.         data.name = "66";  
  44.         myList.add(data);  
  45.         data = new MyData();  
  46.         data.name = "77";  
  47.         myList.add(data);  
  48.         inflater = LayoutInflater.from(this);  
  49.         TextView header = (TextView)inflater.inflate(R.layout.header, null);  
  50.         TextView footer = (TextView)inflater.inflate(R.layout.footer, null);  
  51.         //list.addFooterView(footer);
  52.         //list.addHeaderView(header);
  53.         myAdapter = new myAdapter();  
  54.         list.setAdapter(myAdapter);  
  55.         list.setOnItemClickListener(new OnItemClickListener() {  
  56.             @Override
  57.             publicvoid onItemClick(AdapterView<?> parent, View view, int position, long id) {  
  58.                 MyData data = myList.get(position);  
  59.                 if (oldPostion == position) {  
  60.                     if (data.expand)  {  
  61.                         oldPostion = -1;  
  62.                     }  
  63.                     data.expand = !data.expand;  
  64.                 }else{  
  65.                     oldPostion = position;  
  66.                     data.expand = true;  
  67.                 }  
  68.                 int totalHeight = 0;  
  69.                 for(int i=0;i<myAdapter.getCount();i++) {  
  70.                     View viewItem = myAdapter.getView(i, null, list);//這個很重要,那個展開的item的measureHeight比其他的大
  71.                     viewItem.measure(00);  
  72.                     totalHeight += viewItem.getMeasuredHeight();  
  73.                 }  
  74.                 ViewGroup.LayoutParams params = list.getLayoutParams();  
  75.                 params.height = totalHeight  
  76.                         + (list.getDividerHeight() * (list.getCount() - 1));  
  77.                 list.setLayoutParams(params);  
  78.                 myAdapter.notifyDataSetChanged();  
  79.             }  
  80.         });  
  81.         Button btn = (Button)findViewById(R.id.btn);  
  82.         btn.setOnClickListener(new View.OnClickListener() {  
  83.             @Override
  84.             publicvoid onClick(View v) {  
  85.             }  
  86.         });  
  87.     }  
  88.     privateclass myAdapter extends BaseAdapter{  
  89.         @Override
  90.         publicint getCount() {  
  91.             return myList.size();  
  92.         }  
  93.         @Override
  94.         public Object getItem(int position) {  
  95.             return myList.get(position);  
  96.         }  
  97.         @Override
  98.         publiclong getItemId(int position) {  
  99.             return position;  
  100.         }  
  101.         @Override
  102.         public View getView(int position, View convertView, ViewGroup parent) {  
  103.             MyTag tag = new MyTag();  
  104.             MyData data = myList.get(position);  
  105.             if(convertView == null) {  
  106.                 convertView = inflater.inflate(R.layout.item_layout, null);  
  107.                 tag.item1 = (TextView)convertView.findViewById(R.id.item1);  
  108.                 tag.item2 = (RelativeLayout)convertView.findViewById(R.id.item2);  
  109.                 convertView.setTag(tag);  
  110.             }else{  
  111.                 tag = (MyTag)convertView.getTag();  
  112.             }  
  113.             if(data.expand) {  
  114.                 tag.item2.setVisibility(View.VISIBLE);  
  115.             }else{  
  116.                 tag.item2.setVisibility(View.GONE);  
  117.             }  
  118.             tag.item1.setText(data.name);  
  119.             return convertView;  
  120.         }  
  121.     }  
  122.     privateclass MyTag{  
  123.         private TextView item1;  
  124.         private RelativeLayout item2;  
  125.     }  
  126.     privateclass MyData{  
  127.         boolean expand;  
  128.         String name;  
  129.     }  
  130. }  

Layout:
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     xmlns:tools="http://schemas.android.com/tools"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="wrap_content"
  5.     android:minHeight="50dp" >  
  6.     <TextView  
  7.         android:id="@+id/item1"
  8.         android:layout_width="wrap_content"
  9.         android:layout_height="wrap_content"
  10.         android:layout_marginTop="10dp"
  11.         android:layout_centerHorizontal="true"
  12.         android:gravity="center"
  13.         android:text="Header"
  14.         android:textColor="#000000"
  15.         android:textSize="20sp" >  
  16.     </TextView>  
  17.     <RelativeLayout  
  18.         android:id="@+id/item2"
  19.         android:layout_below="@id/item1"
  20.         android:layout_width="match_parent"
  21.         android:layout_height="wrap_content"
  22.         android:minHeight="35dp"
  23. 相關推薦

    androidlistviewitem展開內容

    本文轉載自: http://blog.csdn.net/baidu_nod/article/details/38610749 import java.util.ArrayList;   import android.app.Activity;   import and

    androidListViewitem使item展開的做法

    ram visible draggable baseadapt lns tco ttext long aid 直接上代碼把。主要是又一次給item measure高度,直接上代碼把 import java.util.ArrayList; import android

    android listViewitem,高亮顯示

    實現listView中選擇item高亮的功能,最重要的程式碼就是 adapter.notifyDataSetInvalidated(); 通知觀察者,此條資料不再有效。 其次需要在實現BaseAdapter的類中新增一個方法,紀錄選中的item的id

    ListViewItem更換顯示內容圖片

    先上效果圖 佈局檔案(就是一個listView) <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.androi

    android ListViewitem刪除事件的實現

    2016 -10 -12   修改 之前只是為自己做個筆記,沒想到還挺多人需要這個,現在對程式碼進行了優化,並附上原始碼,希望能夠幫助到需要的同行 activity_main: <LinearLayout xmlns:android="http://schema

    AndroidListViewonItemClick不響應,onTouch和onItemLongClick響應

    這裡先說以下原因,我這裡的ListView不能點選,可能是跟執行緒更新UI有關,與獲取焦點之類無關。 程式裡的ListView設定了點選監聽setOnItemClickListener,長按監聽setOnItemLongClickListener,觸控監聽setOnTouchListener。

    listviewitem,在item的上邊彈出popwindow

    public class ListActivity extends Activity {          private PopupWindow popupWindow;          private TextView mTextView;          @Ove

    ListViewitem底部彈出popupWindow刪除、修改、取消選擇框

    先看一下效果: 點選單個item彈出選擇框,可以選擇刪除或者修改。刪除單條item,或者跳轉到修改頁面。 listview的佈局: <?xml version="1.0" encoding="utf-8"?> <LinearLay

    AndroidListView事件失效的解決辦法

    今天的第二篇部落格了,每一篇都只為了記錄我所做專案中遇到的一些問題。 現在我所做的專案是這樣的:我做了一個讀取手機通訊記錄的介面,使用了ListView控制元件,在ListView的item中添加了一個按鈕。程式碼編寫完成後,經過模擬器執行,發現ListView的setOn

    ListViewitem改變背景,重新選中另一項重新整理,預設是選中第一項的狀態

    今天在工作中遇到一個需求,一個橫版的listview,需要設定item選中之後改變當前item的背景色,重新選擇另一個item之後新選擇的改變背景,原來的恢復,並且需要設定第一項預設選中,開始想的解決方案是給item的根目錄背景設定一個選擇器,點選時一種顏色,取消點選一種顏

    android捕獲ListView中每個item擊事件

    ont app eat sta cell undle android number stat package com.wps.android; import java.util.ArrayList; import android.app.Activity;

    AndroidListViewitem獲取不到焦點

    前兩天我在寫一個ListView,其中自定義的item中的控制元件有ImageView、TextView、Button,反正是比較複雜,寫完一整套流程後,真機一執行,詭異的事情出現了,點選item居然無響應。這怎麼回事呢?找了又找,程式碼看了一遍又一遍,沒問題

    Android MaterialDesign水波效果的幾種實現方法

    什麼是水波點選的效果? 下面是幾種不同的實現方法的效果圖以及實現方法   Video_2016-08-31_003846 如何實現? 方法一 使用

    Android-文字摺疊展開

    資訊欄,景點介紹,購物資訊,進場會使用到文字摺疊的方法 實現非常簡單,這裡就不哆嗦了 效果如下: Demo:https://github.com/LonglyWolf/NavigationSystemHLJU 這裡用到了三方類庫,在app/gradle新增依賴如下: /

    Android ListView之後保持更換的背景色,實現已讀功能

            因為專案中有這樣的需求:一般訊息類或者資訊類的介面,都有類似於網易客戶端的點選之後更換背景色,並且保持這個顏色,表示已讀取該條資訊。這個功能一開始覺得已經實現了,在我的另一篇部落格上有:點選開啟連結 後來測試人員在測試的時候,發現這樣一個奇怪的問題:    

    Android通知通知欄通知後返回正在執行的程式,而不是一個新Activity

    一般的寫法,點選通知欄進入的Activity是一個新建立的Activity,而不是原先正在執行的Activity,這和我的想法是背道而馳的。當你點選返回按鍵退出這個Activity之後,發現,原先正在執行的Activity終於出現了。明顯這樣是不符合條理的。

    ListView事件失效(item裡面有button按鈕控制元件)解決方法

    ListView點選事件失效解決方法: 一般出現這個情況,就是你的item裡面有按鈕的點選事件,你的item裡面有button控制元件,button控制元件是搶佔焦點的,只要在你的item佈局裡面這樣子寫就可以了: &l

    Android TextView的效果改變背景顏色

    在學習Android過程中,我們有時想要TextView有點選效果,不是文字的變化而是背景顏色的變化,那麼怎麼來實現呢? 下面將介紹如何實現: 1.在res目錄下的drawable(此檔案是自己手動建立的)檔案下建立一個點選效果的檔案:tv_bg_selector.xml

    AndroidListView包含RadioButton的單問題解決辦法

    1.最簡潔的解決辦法。 adapter裡儲存當前選中的位置變數,getView方法裡,禁用radiobutton的點選事件,只通過listview的onItemClick事件設定選中位置變數,並且通過notifyDataSetChanged重新整理列表。getView方法裡

    Android-listview新增控制元件導致listview事件失效

    今天寫了個demo,dialog自定義佈局添加了個listview,listview  item裡面加了個checkBox,需求checkBox在列表裡有單選的效果:測試的時候需要點選item也改變checkBox的選中狀態,然而listview的點選事件失效了。後來發現是失