在平板上經常能看到這種的情況:左邊是一個列表,右邊是列表項對應的內容,當點擊某一個列表時,右邊內容區也會隨之改變。下面使用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;
}
}
效果:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持萬仟網。