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.mzph.cn/news/532759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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…

计算机应用与基础实践怎么考,自考计算机基础应用科目笔试和实践性考试怎么考...

自考计算机基础应用科目笔试和实践性考试怎么考&#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;…

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;一个通用的、可定制…

局域网中计算机网络密码查看,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…

(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#/ 背景 很多人 (你们的同学们、家长们) 都有一个认识&…

(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;但…

Linux中的硬链接和软链接

Linux中的硬链接和软链接 节选自南大蒋炎岩老师操作系统网络课程笔记&#xff1a;(2021) 24 [持久化] 文件系统API 硬&#xff08;hard&#xff09;链接 UNIX文件指针 在UNIX中&#xff0c;文件和目录完全不是同一个概念&#xff0c;虽然我们平时看着它们仿佛并列地躺在某个…

计算机win10开机音乐,大师传授win10系统电脑开机总是自动播放音乐的方案

今天小编分享一下win10系统电脑开机总是自动播放音乐问题的处理方法&#xff0c;在操作win10电脑的过程中常常不知道怎么去解决win10系统电脑开机总是自动播放音乐的问题&#xff0c;有什么好的方法去处理win10系统电脑开机总是自动播放音乐呢&#xff1f;今天本站小编教您怎么…

Linux中的tty、pts、pty等概念辨析

Linux中的tty、pts、pty等概念辨析 基本概念 tty、pty、pts、ptmx tty&#xff08;终端设备的统称&#xff09;&#xff1a;tty一词源于Teletypes&#xff0c;或teletypewriters&#xff0c;原来指的是电传打字机&#xff0c;是通过串行线用打印机键盘通过阅读和发送信息的东…

(2021) 25 [持久化] 文件系统实现:FAT和UNIX文件系统

(2021) 25 [持久化] 文件系统实现&#xff1a;FAT和UNIX文件系统 南京大学操作系统课蒋炎岩老师网络课程笔记。 视频&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p25 讲义&#xff1a;http://jyywiki.cn/OS/2021/slides/15.slides#/ 背景 回顾 应用眼中的文件…

用计算机模拟地球诞生,计算机模拟显示早期金星或像地球一样宜居

虽然金星的绰号是“地球的邪恶孪生化身”&#xff0c;但它和地球上的一切都不同&#xff1a;灼热、干燥并且被有毒烟云笼罩。不过&#xff0c;就在10亿或20亿年前&#xff0c;这两个任性的“兄弟”可能更加相似。最新的计算机模拟显示&#xff0c;早期的金星看上去和地球很像&a…

海南大学计算机原理,海南大学微机原理课件 第一章 计算机基础知识

第一章计算机基础知识数 制1.1一.计算机使用的数制及其相互转换 十进制(D)、二进制(B)、八进制(O)和十六进制(H). 数制中用少量数码按次序排列成数位&#xff0c;并按由低到高的进位方式进行计 数。(数码的个数称为基数) D---0,1,2,3,4,5,6,7,8,9------数码十个(基为10)-------…

pe能用的固态硬盘测试软件,通用pe工具箱教你如何让硬盘4K对齐

昨天小编教大家如何查看电脑硬盘是否4K对齐&#xff0c;马上就有读者告诉小编&#xff0c;查看电脑硬盘是否4K对齐的方法学到了&#xff0c;那么我使用的固态硬盘如何做到4K对齐呢&#xff1f;问的好啊&#xff01;现如今用户对电脑硬件的要求是越来越高。很多用户都不仅仅满足…