Android开发:动态生成TextView

或许小伙伴们在安卓开发的过程中,会碰到这么一种需求:需要动态的展示列表信息;我这里以我最近开发的会议信息发布屏为例子。

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

1、在需要动态生成 TextView 标签的布局文件中添加

 不想手敲可以直接在右上角选择 Design 视图模式下直接拖动调节

2、新建 list_view.xml 文件(名字无所谓啦可以自定义),在里面设置好 TextView的布局

 

 同上面一样,不想手敲直接开启 Design 视图模式调节,TextView想加多少个都行,根据自己页面布局来

3、在你动态加载布局文件的 .java 文件的 onGreat 方法中遍历好需要的数据

@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 方法中写,如果大家对引入数据库感兴趣的话,我后面也会出一篇博客分享给大家!

4、新建 MyAdapter 类继承 BaseAdapter 类(名字自己定义)

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 开发当中,如果各位大佬有更好的方法或发现了我有什么错误的地方,欢迎及时指正!如果也有在学习当中的小伙伴有什么地方不太清楚的话,也可以评论或私信一起讨论!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值