[分享] 把ListVIEW打包成Adapter再裝進普通的ACTIVITY

看板AndroidDev作者 (嗨)時間13年前 (2011/04/19 22:58), 編輯推噓6(6014)
留言20則, 6人參與, 最新討論串1/1
基本觀念,請先熟讀302篇大大分享的自訂ListVIEW方法 有了那篇的觀念以後,瞭解了list view裡每列的長像,是在adapter.xml中畫好的 之後由於我想把這個listview裝進普通的activity裡 首先來講一下我的所謂的普通的activity長怎麼樣吧 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/tiger"> <TextView android:id="@+id/T1" android:layout_width="fill_parent" android:layout_height="45px" android:text="@string/hello" android:background="#222222" android:layout_marginTop="40px" android:textSize="28px" <ListView android:id="@+id/L1" android:layout_height="wrap_content" android:layout_width="match_parent" android:layout_marginLeft="30px" android:layout_marginRight="30px" android:cacheColorHint="#00000000"/> </LinearLayout> 是的,裡面有一個叫T1的TextVIEW 還有一個叫L1的ListVIEW 其中listview是專門用來裝list的容器... 還有一種容器叫做checkable_textview(好像是這樣) 因為種類太多太雜,所以我也沒有研究很多 只是一開始學這邊的時候覺得在java檔裡動態產生文字的list比較簡單 只要 private ArrayAdapter<String> adapter; private static final String[] array ={~~~~~~~~~}; 再 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.simple_list_item_1, array); myListView.setAdapter(adapter); 就可以把字串陣列丟到系統內建名為simple_list_item_1的 listview樣式裡了 然後 在302篇中教了如何用使一個自訂的adapter(樣式) 來代替simpli_list_item_1 於是現在我們的list都有了圖片 以及可能不只一行的文字 於是我把iconAdapter包在我的main activity裡 public class main extends Activity { TextView T1; ListView L1; private static class iconAdapter extends BaseAdapter { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //並且把adapter丟到我的L1裡 L1.setAdapter(new iconAdapter(this)); } } 然後!!!! 要讓你的listview可以接受點擊事件,就在onCreate裡增加L1的Listener L1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { T1.setText("你選的是" + DATA[arg2]); } @Override }); L1.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, final int arg2, long arg3) { T1.setText("你選的是" + DATA[arg2]); } }); 據我所知,好像是當你有把adapter丟進listview時 才可以給listview設listener 若是引用302篇那範例,想要讓你的list可以接受點擊事件 則只要加入 (在onCreate之外加) @Override public void onListItemClick(ListView l, View v, final int position, long id) { Toast.makeText(this, DATA[position].toString() + "已核取!", Toast.LENGTH_SHORT).show(); super.onListItemClick(l, v, position, id); } 和上面不一樣的是,這裡的position是代表你點到第幾欄位 上面那裡的arg2才是點到第幾欄位 當你的list東西太多,滿到下面去.....在滑動時若會變黑, 請記得在xml檔裡的listview屬性裡加一行 android:cacheColorHint="#00000000" <--------變白 今天要分享的大概就是這樣 302那篇真的很詳細,我是踩在巨人的肩膀上:) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.51.13

04/20 01:08, , 1F
站在巨人肩膀正向循環阿 推 已收錄
04/20 01:08, 1F

04/20 03:19, , 2F
感謝,收文了
04/20 03:19, 2F

04/20 08:19, , 3F
感謝你對我的文章評價那麼高 你這篇也很有參考價值
04/20 08:19, 3F

04/20 08:19, , 4F
文章用302標記 可能會跑掉 建議用文章代碼表示:)
04/20 08:19, 4F

04/20 08:21, , 5F
另外如果能夠有再你這份教學程式下載 就更完美了^^
04/20 08:21, 5F

04/20 11:12, , 6F
推一下!感謝各位分享
04/20 11:12, 6F

04/20 11:12, , 7F
借版面一問,如果registerContextMenu(ListView)的話
04/20 11:12, 7F

04/20 11:13, , 8F
有辦法可以避免header/(置底)的layout不要產生context
04/20 11:13, 8F

04/20 11:13, , 9F
menu嗎?不然感覺很奇怪(只想讓list item有menu)
04/20 11:13, 9F

04/20 13:09, , 10F
補充:最後提到的cacheColorHint="#00000000"是ARGB格式
04/20 13:09, 10F

04/20 13:10, , 11F
最前面的00是控制透明度
04/20 13:10, 11F

04/20 14:17, , 12F
回tomap大,http://ppt.cc/~M9H,不知有沒有幫助
04/20 14:17, 12F

04/20 15:28, , 13F
感謝樓上回復,後來發現我的問題只要不要把header/foot
04/20 15:28, 13F

04/20 15:28, , 14F
放在內就好了= =因之前用listActivity還不知道怎麼自訂
04/20 15:28, 14F

04/20 15:29, , 15F
main,剛找到一個網站有說明,只要把ListView的id設成
04/20 15:29, 15F

04/20 15:29, , 16F
android:list就可自動bind了XD
04/20 15:29, 16F

04/20 20:26, , 17F
其實我不是很懂tomap大的問題耶,解決了後要發分享文
04/20 20:26, 17F

04/20 20:26, , 18F
嗎XD
04/20 20:26, 18F

04/22 12:30, , 19F
補上我的程式載點
04/22 12:30, 19F

04/22 12:30, , 20F
文章代碼(AID): #1DhQCGx3 (AndroidDev)
文章代碼(AID): #1DhQCGx3 (AndroidDev)