android雙聯動列表,Android Fragment實現列表和內容聯動

在平板上經常能看到這種的情況:左邊是一個列表,右邊是列表項對應的內容,當點擊某一個列表時,右邊內容區也會隨之改變。下面使用fragment簡單的demo:

思路:在mainactivity定義一個回調接口,并在列表點擊回調該接口,然后在內容區的fragment設置回調,同時改變fragment的顯示內容。具體代碼如下:

主布局:

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_marginleft="16dp"

android:layout_marginright="16dp"

android:divider="?android:attr/dividervertical"

android:showdividers="middle">

android:id="@+id/book_list"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1"/>

android:id="@+id/book_detail_container"

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="3"/>

listview的item布局和內容區fragment的布局都比較簡單,分別是一個textview和兩個textview布局,這里不再貼出。

mainactivity類(內容區的數據是寫死的,僅僅做演示作用,一般來說需要從網絡上獲取數據):

public class mainactivity extends activity

{

private onchangelistener onchangedlistener;

list books;

list book_name = new arraylist<>();

listview listview;

adapter adapter;

@override

protected void oncreate(bundle savedinstancestate)

{

super.oncreate(savedinstancestate);

setcontentview(r.layout.main);

books = new arraylist<>();

initdata();

for (int i = 0 ; i < books.size() ; i++)

{

book_name.add(books.get(i).getname());

}

listview = (listview) findviewbyid(r.id.book_list);

adapter = new adapter(book_name , this);

listview.setadapter(adapter);

myfragment fragment = new myfragment();

fragmentmanager fragmentmanager = getfragmentmanager();

fragmenttransaction transaction = fragmentmanager.begintransaction();

transaction.replace(r.id.book_detail_container , fragment);

transaction.commit();

listview.setonitemclicklistener(new adapterview.onitemclicklistener()

{

@override

public void onitemclick(adapterview> parent, view view, int position, long id)

{

adapter.setselectedposition(position);

adapter.notifydatasetinvalidated();

if (onchangedlistener != null)

{

onchangedlistener.changetext(books.get(position));

}

}

});

}

private void initdata()

{

book book1 = new book();

book1.setid(1);

book1.setname("瘋狂java講義");

book1.setdesc("一本全面的,深入的java學習圖書,受到廣大讀者的熱烈喜愛,已經被多家高校選為教材,成為國內一線的java學習素材");

books.add(book1);

book book2 = new book();

book2.setid(2);

book2.setname("瘋狂android講義");

book2.setdesc("android學習者的首選教材,常年占據京東,當當,亞馬遜3大網店android銷量排行榜首,是人人可必備的android入門圖書");

books.add(book2);

book book3 = new book();

book3.setid(3);

book3.setname("java ee企業應用實戰");

book3.setdesc("全面介紹java ee開發的struts2 , spring 3 , hibernate 4 架構,可以通過該書系統學習企業級開發,全面掌握java學習");

books.add(book3);

book book4 = new book();

book4.setid(4);

book4.setname("html5開發");

book4.setdesc("全面介紹html5,css ,javascript等知識點,通過該書可以系統的學習web前端開發,通常javascript腳本設置動態頁面");

books.add(book4);

}

public void setonchangelistener(onchangelistener onchangelistener)

{

this.onchangedlistener = onchangelistener;

}

interface onchangelistener

{

void changetext(book book);

}

}

列表的adapter類:

public class adapter extends baseadapter

{

private list mdata;

private layoutinflater layoutinflater;

private int selectionposition = -1;

public adapter(list data , context context)

{

this.mdata = data;

this.layoutinflater = layoutinflater.from(context);

}

@override

public int getcount()

{

return mdata.size();

}

@override

public object getitem(int position)

{

return mdata.get(position);

}

@override

public long getitemid(int position)

{

return position;

}

@override

public view getview(int position, view convertview, viewgroup viewgroup)

{

viewholder viewholder = null;

if (convertview == null)

{

viewholder = new viewholder();

convertview = layoutinflater.inflate(r.layout.item_layout , null);

viewholder.tv = (textview) convertview.findviewbyid(r.id.item_text);

convertview.settag(viewholder);

}

else

{

viewholder = (viewholder) convertview.gettag();

}

viewholder.tv.settext(mdata.get(position));

if (selectionposition == position)

{

viewholder.tv.setbackgroundcolor(color.yellow);

}

else

{

viewholder.tv.setbackgroundcolor(color.white);

}

return convertview;

}

public void setselectedposition(int position)

{

this.selectionposition = position;

}

class viewholder

{

textview tv;

}

}

內容區的fragment類:

public class myfragment extends fragment

{

mainactivity activity;

private textview title;

private textview desc;

@nullable

@override

public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate)

{

view view = inflater.inflate(r.layout.fragment_book_detail , null);

title = (textview) view.findviewbyid(r.id.book_title);

desc = (textview) view.findviewbyid(r.id.book_desc);

log.d("fragment" , "created");

activity = (mainactivity) getactivity();

activity.setonchangelistener(new mainactivity.onchangelistener()

{

@override

public void changetext(book book)

{

title.settext(book.getname());

desc.settext(book.getdesc());

}

});

return view;

}

}

book實體類:

public class book

{

private int id;

private string name;

private string desc;

public book()

{

}

public book(int id , string name , string desc)

{

this.id = id;

this.name = name;

this.desc = desc;

}

public void setname(string name) {

this.name = name;

}

public void setid(int id) {

this.id = id;

}

public void setdesc(string desc) {

this.desc = desc;

}

public int getid() {

return id;

}

public string getname() {

return name;

}

public string getdesc() {

return desc;

}

}

效果:

1d195532f43d09b18d0828a35cc5406b.png

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持萬仟網。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532759.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532759.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532759.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux /proc 詳解

linux /proc 詳解 本文整理了一下 linux /proc下的幾個常用的目錄和文件&#xff0c;可供查閱&#xff0c;之后在學習工作中有別的用到的話會再補充。 /proc 簡介 Linux系統上的/proc目錄是一種文件系統&#xff0c;即proc文件系統。與其它常見的文件系統不同的是&#xff0…

android模擬器太卡,安卓模擬器安裝之后太卡怎么解決

用安卓模擬器玩游戲原理就是在電腦上安裝了一部手機&#xff0c;如果你的電腦配置不是非常高&#xff0c;能不卡頓嗎?遇到卡頓怎么解決?1、安裝最新版本的顯卡驅動。逍遙模擬器對于顯卡的性能要求很高&#xff0c;因此升級至最新版本的顯卡驅動&#xff0c;是確保逍遙模擬器流…

編程環境中Runtime(運行時)的三個含義

編程環境中Runtime&#xff08;運行時&#xff09;的三個含義 轉自&#xff1a;https://www.zhihu.com/question/20607178 知乎答主doodlewind 三個含義 實際上編程語境中的 runtime 至少有三個含義&#xff0c;分別是&#xff1a; 指「程序運行的時候」&#xff0c;即程序…

非常不錯的一款html5【404頁面】,不含js腳本可以左右擺動,原生JavaScript實現日歷功能代碼實例(無引用Jq)...

這篇文章主要介紹了原生JavaScript實現日歷功能代碼實例(無引用Jq),文中通過示例代碼介紹的非常詳細&#xff0c;對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下成品顯示&#xff0c;可左右切換月份html 代碼移動端日歷日一二三四五六css代碼*{margin: 0;pa…

12 [虛擬化] 進程抽象;fork,execve,exit

12 [虛擬化] 進程抽象&#xff1b;fork&#xff0c;execve&#xff0c;exit 南京大學操作系統課蔣炎巖老師網絡課程筆記。 視頻&#xff1a;https://www.bilibili.com/video/BV1N741177F5?p12 講義&#xff1a;http://jyywiki.cn/OS/2021/slides/8.slides#/ 本講概述 回到“…

計算機應用與基礎實踐怎么考,自考計算機基礎應用科目筆試和實踐性考試怎么考...

自考計算機基礎應用科目筆試和實踐性考試怎么考&#xff1f; 報考自考的考生有些專業的考生會在自己的課程科目中發現計算機基礎應用不僅有理論知識考試還有實踐性考試&#xff0c;那么自考計算機基礎應用科目的筆試和實踐性考試怎么考&#xff1f;自考計算機基礎應用科目筆試怎…

14 [虛擬化] 虛存抽象;Linux進程的地址空間

14 [虛擬化] 虛存抽象&#xff1b;Linux進程的地址空間 南京大學操作系統課蔣炎巖老師網絡課程筆記。 視頻&#xff1a;https://www.bilibili.com/video/BV1N741177F5?p14 講義&#xff1a;http://jyywiki.cn/OS/2021/slides/10.slides#/ 本講概述 程序 狀態機&#xff1b;…

瀏覽器是指在用戶計算機上,自考《網頁設計與制作》測試題及答案

自考《網頁設計與制作》測試題及答案學習是一個不斷積累的過程&#xff0c;為幫助考生們更好地復習《與制作》科目知識點&#xff0c;以下是搜索整理的一份自考《網頁設計與制作》測試題及答案&#xff0c;供參考練習&#xff0c;希望對大家有所幫助!想了解更多相關信息請持續關…

Ubuntu 18.04 安裝OpenCV C++

Ubuntu 18.04 安裝OpenCV C 構建并安裝 僅構建核心模塊 # 更新并安裝依賴 # 更新并安裝依賴 sudo apt update && sudo apt install -y cmake g wget unzip# 下載并解壓包 wget -O opencv.zip https://github.com/opencv/opencv/archive/master.zip unzip opencv.zip…

html計算x的y,HTML5畫布:旋轉時計算x,y點

我開發了一個HTML5 Canvas應用程序&#xff0c;它涉及到讀取一個xml文件&#xff0c;該文件描述了需要在畫布上繪制的箭頭&#xff0c;直形和其他形狀的位置。的XML布局的HTML5畫布&#xff1a;旋轉時計算x&#xff0c;y點實施例&#xff1a;如果對象被旋轉它涉及計算一個點的位…

(2021) 20 [虛擬化] 進程調度

(2021) 20 [虛擬化] 進程調度 南京大學操作系統課蔣炎巖老師網絡課程筆記。 視頻&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p20 講義&#xff1a;http://jyywiki.cn/OS/2021/slides/11.slides#/ 背景 — 機制與策略分離 機制&#xff1a;一個通用的、可定制…

計算機組裝過程英文版,計算機組裝與維護試題及答案(國外英文資料).doc

計算機組裝與維護試題及答案(國外英文資料)計算機組裝與維護試題及答案(國外英文資料)(1) choiceIn the following equipment, the input device is (b)A. b. b. c. c. c. d. d.In Windows 98, the combination of CTRL Alt Del is (c)A. cold start b. heat start c. interr…

make命令及makefile

make命令及makefile 轉自&#xff1a;https://www.ruanyifeng.com/blog/2015/02/make.html Make 命令教程 作者&#xff1a; 阮一峰 日期&#xff1a; 2015年2月20日 代碼變成可執行文件&#xff0c;叫做編譯&#xff08;compile&#xff09;&#xff1b;先編譯這個&#…

局域網中計算機網絡密碼查看,Win10怎么查看電腦上已知的wifi網絡密碼

方法一&#xff1a;網絡和共享中心查詢1、在Windows 10桌面最左下角的【Windwos開始圖標上右鍵】&#xff0c;在彈出的菜單中點擊打開【網絡連接】&#xff0c;如下圖所示。2、在打開的網絡連接設置中&#xff0c;雙擊已經連接的【無線網絡名稱】&#xff0c;在彈出的【WLAN狀態…

(2021) 22 [持久化] 1-Bit的存儲

(2021) 22 [持久化] 1-Bit的存儲 南京大學操作系統課蔣炎巖老師網絡課程筆記。 視頻&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p22 講義&#xff1a;http://jyywiki.cn/OS/2021/slides/12.slides#/ 背景 回顧 操作系統是什么&#xff1f;一組對象 一組API…

計算機一級試題論述,計算機一級考試理論題及答案要點

計算機一級考試IT1必做題[1]. 著名的計算機科學家尼.沃思提出了________。A&#xff0e;數據結構&#xff0b;算法程序B&#xff0e;存儲控制結構C&#xff0e;信息熵D&#xff0e;控制論[2]. 下面有關掃描儀的敘述中&#xff0c;錯誤的是________。A&#xff0e;分辨率是掃描儀…

(2021) 23 [持久化] I/O設備與驅動

(2021) 23 [持久化] I/O設備與驅動 南京大學操作系統課蔣炎巖老師網絡課程筆記。 視頻&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p23 講義&#xff1a;http://jyywiki.cn/OS/2021/slides/13.slides#/ 背景 很多人 (你們的同學們、家長們) 都有一個認識&…

計算機考研計劃時間,2019計算機考研時間安排:復習時間規劃

隨著考研競爭越來越激烈&#xff0c;考研復習一定要做好規劃&#xff0c;每天的時間要做好管理&#xff0c;分清輕重緩急&#xff0c;這樣才能高效率復習。管理的5個原則&#xff0c;大家抓緊調整個人復習。小編還為大家精心準備了計算機考研復習資料還有計算機考研報考指導助力…

(2021) 24 [持久化] 文件系統API

(2021) 24 [持久化] 文件系統API 南京大學操作系統課蔣炎巖老師網絡課程筆記。 視頻&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p24 講義&#xff1a;http://jyywiki.cn/OS/2021/slides/14.slides#/ 背景 回顧 硬件視角&#xff1a;持久化的“層層抽象” 物…

計算機輔助應用的縮寫有什么,計算機輔助設計的英文縮寫是什么

2008-10-09是什么的英文縮寫?BOBO......頭型里的.....其實"BOBO頭"準確的名稱應該是BOB頭。它是娃娃頭的一種。BOB頭有許多變種&#xff0c;標準的類似于櫻桃小丸子的發型&#xff0c;專業發型師把它稱為BOB。最初是由巴黎發型師Antoine 在1909年發明&#xff0c;但…