android双联动列表,Android Fragment实现列表和内容联动
在平板上經(jīng)常能看到這種的情況:左邊是一個(gè)列表,右邊是列表項(xiàng)對(duì)應(yīng)的內(nèi)容,當(dāng)點(diǎn)擊某一個(gè)列表時(shí),右邊內(nèi)容區(qū)也會(huì)隨之改變。下面使用fragment簡(jiǎn)單的demo:
思路:在mainactivity定義一個(gè)回調(diào)接口,并在列表點(diǎn)擊回調(diào)該接口,然后在內(nèi)容區(qū)的fragment設(shè)置回調(diào),同時(shí)改變fragment的顯示內(nèi)容。具體代碼如下:
主布局:
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布局和內(nèi)容區(qū)fragment的布局都比較簡(jiǎn)單,分別是一個(gè)textview和兩個(gè)textview布局,這里不再貼出。
mainactivity類(lèi)(內(nèi)容區(qū)的數(shù)據(jù)是寫(xiě)死的,僅僅做演示作用,一般來(lái)說(shuō)需要從網(wǎng)絡(luò)上獲取數(shù)據(jù)):
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學(xué)習(xí)圖書(shū),受到廣大讀者的熱烈喜愛(ài),已經(jīng)被多家高校選為教材,成為國(guó)內(nèi)一線的java學(xué)習(xí)素材");
books.add(book1);
book book2 = new book();
book2.setid(2);
book2.setname("瘋狂android講義");
book2.setdesc("android學(xué)習(xí)者的首選教材,常年占據(jù)京東,當(dāng)當(dāng),亞馬遜3大網(wǎng)店android銷(xiāo)量排行榜首,是人人可必備的android入門(mén)圖書(shū)");
books.add(book2);
book book3 = new book();
book3.setid(3);
book3.setname("java ee企業(yè)應(yīng)用實(shí)戰(zhàn)");
book3.setdesc("全面介紹java ee開(kāi)發(fā)的struts2 , spring 3 , hibernate 4 架構(gòu),可以通過(guò)該書(shū)系統(tǒng)學(xué)習(xí)企業(yè)級(jí)開(kāi)發(fā),全面掌握java學(xué)習(xí)");
books.add(book3);
book book4 = new book();
book4.setid(4);
book4.setname("html5開(kāi)發(fā)");
book4.setdesc("全面介紹html5,css ,javascript等知識(shí)點(diǎn),通過(guò)該書(shū)可以系統(tǒng)的學(xué)習(xí)web前端開(kāi)發(fā),通常javascript腳本設(shè)置動(dòng)態(tài)頁(yè)面");
books.add(book4);
}
public void setonchangelistener(onchangelistener onchangelistener)
{
this.onchangedlistener = onchangelistener;
}
interface onchangelistener
{
void changetext(book book);
}
}
列表的adapter類(lèi):
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;
}
}
內(nèi)容區(qū)的fragment類(lèi):
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實(shí)體類(lèi):
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;
}
}
效果:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持萬(wàn)仟網(wǎng)。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的android双联动列表,Android Fragment实现列表和内容联动的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 以色列梅卡瓦3主战坦克
- 下一篇: android新建项目错误,新建Andr