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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值