或许小伙伴们在安卓开发的过程中,会碰到这么一种需求:需要动态的展示列表信息;我这里以我最近开发的会议信息发布屏为例子。
那么会议预约发布屏需要展示当天的会议预约信息,问题是我并不知道这天是否有会议预约,也就不知道需要多少个 TextView 标签。如果是普通的 Java+jsp或Vue开发,这种需求就非常简单;前者只需要引入 jstl 标签库配合 el 表达式就可以轻松完成需求,后者使用 ElementUI 也可以轻松达成要求。那么在安卓开发中,又应该怎么做出这种效果呢?这就是我今天给大家分享的 <ListView>标签!话不多说,上代码!

不想手敲可以直接在右上角选择 Design 视图模式下直接拖动调节
同上面一样,不想手敲直接开启 Design 视图模式调节,TextView想加多少个都行,根据自己页面布局来
@Override
public void showResponse(List<TCrConferenceReservation> result) {
Date date = new Date();
//动态加载TextView
ListView listView = (ListView) findViewById(R.id.list);
List<ConferenceReservationVO> list = new ArrayList<>();
for (TCrConferenceReservation c : result) {
if (DateUtils.isToday(DateUtils.convertDate(c.getStartTime(),"yyyy-MM-dd HH:mm").getTime()) && (DateUtils.convertDate(c.getEndTime(),"yyyy-MM-dd HH:mm").getTime() > date.getTime())){
ConferenceReservationVO conferenceReservationVO = new ConferenceReservationVO();
conferenceReservationVO.setId(c.getId());
conferenceReservationVO.setName(c.getName());
conferenceReservationVO.setIntroduction(c.getIntroduction());
conferenceReservationVO.setEmployeeName(c.getEmployeeName());
conferenceReservationVO.setDepartmentName(c.getDepartmentName());
conferenceReservationVO.setCreateTime(c.getCreateTime());
conferenceReservationVO.setStartTime(c.getStartTime());
conferenceReservationVO.setEndTime(c.getEndTime());
String startTime = c.getStartTime().substring(11, 16);
String endTime = c.getEndTime().substring(11, 16);
String times = startTime + "-" + endTime;
conferenceReservationVO.setTimeQuantum(times);
String conInFo = times + " | " + c.getEmployeeName() + " | " + c.getDepartmentName();
conferenceReservationVO.setConferenceInformation(conInFo);
list.add(conferenceReservationVO);
}
}
//预约会议时间段
TextView conferenceTime = (TextView) findViewById(R.id.conferenceTime);
//预约会议名
TextView conferenceName = (TextView) findViewById(R.id.conferenceName);
//预约会议人
TextView employeeName = (TextView) findViewById(R.id.employeeName);
//部门名
TextView departmentName = (TextView) findViewById(R.id.departmentName);
//当前时间
TextView currentTime = (TextView) findViewById(R.id.currentTime);
//会议状态
TextView fokus = (TextView) findViewById(R.id.fokus);
//分割线
TextView border = (TextView) findViewById(R.id.border);
//今日会议数
TextView count = (TextView) findViewById(R.id.count);
if (list.size() > 0) {
if (date.getTime() < DateUtils.convertDate(list.get(0).getStartTime(),"yyyy-MM-dd HH:mm").getTime()){
fokus.setText("下一个会议");
border.setBackgroundColor(Color.parseColor("#FB9F4A"));
}
conferenceTime.setText(list.get(0).getTimeQuantum());
conferenceName.setText(list.get(0).getName());
employeeName.setText(list.get(0).getEmployeeName());
departmentName.setText(list.get(0).getDepartmentName());
currentTime.setText(DateUtils.Format(date, "yyyy/MM/dd HH:mm"));
count.setText("今日会议 " + list.size());
}else {
list.add(new ConferenceReservationVO());
fokus.setText("会议空闲中");
border.setBackgroundColor(Color.WHITE);
conferenceName.setText("暂无会议");
conferenceTime.setText("无");
employeeName.setText("无");
departmentName.setText("无");
count.setText("今日会议 " + list.size());
}
listView.setAdapter(new MyAdapter(list,this));
}
我这里是应为在 app 里面添加了数据库,所以没在 onGreat 方法中写,如果大家对引入数据库感兴趣的话,我后面也会出一篇博客分享给大家!
public class MyAdapter extends BaseAdapter {
private List<ConferenceReservationVO> data;
private Context context;
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public boolean isEnabled(int position) {
return false;
}
@Override
public View getView(int i, View con, ViewGroup viewGroup) {
ViewHolder viewHolder;
View view;
Date date = new Date();
if (con == null) {
view = LayoutInflater.from(context).inflate(R.layout.list_view,null);
viewHolder = new ViewHolder(view);
view.setTag(viewHolder);
} else {
view = con;
viewHolder = (ViewHolder) view.getTag();
}
if (data.get(i).getTimeQuantum() != null) {
viewHolder.textView.setText(data.get(i).getName());
viewHolder.info.setText(data.get(i).getConferenceInformation());
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) viewHolder.textView.getLayoutParams();
lp.topMargin = 40;
if (i == 0) {
if ((DateUtils.convertDate(data.get(0).getStartTime(),"yyyy-MM-dd HH:mm").getTime() < date.getTime()) && (DateUtils.convertDate(data.get(0).getEndTime(),"yyyy-MM-dd HH:mm").getTime() > date.getTime())){
System.out.println(DateUtils.convertDate(data.get(0).getEndTime(),"yyyy-MM-dd HH:mm").getTime() > date.getTime());
System.out.println("data.get(0).getEndTime() = " + data.get(0).getEndTime());
viewHolder.tv.setBackgroundColor(Color.parseColor("#5DC755"));
}else if ((DateUtils.convertDate(data.get(0).getStartTime(),"yyyy-MM-dd HH:mm").getTime() > date.getTime())) {
viewHolder.tv.setBackgroundColor(Color.parseColor("#FB9F4A"));
}
}
} else {
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) viewHolder.textView.getLayoutParams();
lp.topMargin = 90;
viewHolder.textView.getLayoutParams();
viewHolder.textView.setText("暂无会议");
}
return view;
}
private final class ViewHolder{
TextView textView;
TextView info;
TextView tv;
public ViewHolder(View view) {
textView = (TextView) view.findViewById(R.id.name);
info = (TextView) view.findViewById(R.id.info);
tv = (TextView) view.findViewById(R.id.tv);
}
}
public MyAdapter(List<ConferenceReservationVO> data, Context context) {
this.data = data;
this.context = context;
}
}
这样就可以了,其实也就这么几步;当然了这也只是非常初级的用法,因为本人也还在学习当中。好了,启动的效果如下:

因为小杰也在学习 Android 开发当中,如果各位大佬有更好的方法或发现了我有什么错误的地方,欢迎及时指正!如果也有在学习当中的小伙伴有什么地方不太清楚的话,也可以评论或私信一起讨论!
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
我是Rails的新手,所以请原谅简单的问题。我正在为一家公司创建一个网站。那家公司想在网站上展示它的客户。我想让客户自己管理这个。我正在为“客户”生成一个表格,我想要的三列是:公司名称、公司描述和Logo。对于名称,我使用的是name:string但不确定如何在脚本/生成脚手架终端命令中最好地创建描述列(因为我打算将其设置为文本区域)和图片。我怀疑描述(我想成为一个文本区域)应该仍然是描述:字符串,然后以实际形式进行调整。不确定如何处理图片字段。那么……说来话长:我在脚手架命令中输入什么来生成描述和图片列? 最佳答案 对于“文本”数
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些