我的编程空间,编程开发者的网络收藏夹

如何在Android中动态添加一个view

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何在Android中动态添加一个view

如何在Android中动态添加一个view?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="match_parent"  android:layout_height="wrap_content">  <RelativeLayout    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:padding="10dp">    <LinearLayout      android:id="@+id/ll_addView"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:orientation="vertical" />    <Button      android:id="@+id/btn_getData"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:layout_below="@+id/ll_addView"      android:layout_marginTop="10dp"      android:background="@drawable/em_btn_green_selector"      android:text="获取数据" />  </RelativeLayout></ScrollView>

再看看要添加的item_hotel_evaluate里面的布局:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:id="@+id/rl_hotelName"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:background="@drawable/editbox_background_normal">  <LinearLayout    android:id="@+id/rl_addHotel"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal">    <TextView      android:id="@+id/tv_hotelName"      android:layout_width="0dp"      android:layout_height="wrap_content"      android:layout_marginLeft="5dp"      android:layout_weight="1"      android:text="酒店名称:"      android:textSize="18sp" />    <EditText      android:id="@+id/ed_hotelName"      android:layout_width="0dp"      android:layout_height="wrap_content"      android:layout_weight="2"      android:background="@drawable/editbox_background_normal"      android:padding="5dp"      android:singleLine="true" />    <Button      android:id="@+id/btn_addHotel"      android:layout_width="0dp"      android:layout_height="30dp"      android:layout_weight="1"      android:background="@drawable/em_btn_green_selector"      android:text="+新增"      android:textColor="@color/white"      android:textSize="18sp" />  </LinearLayout>  <LinearLayout    android:id="@+id/ll_addHotelEvaluate"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_below="@+id/rl_addHotel"    android:layout_marginTop="5dp"    android:orientation="vertical">    <RelativeLayout      android:id="@+id/rl_hotelEvaluate"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:layout_below="@+id/rl_addHotel"      android:layout_marginTop="5dp"      android:orientation="horizontal">      <TextView        android:id="@+id/tv_hotelServer"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true"        android:layout_centerVertical="true"        android:layout_gravity="center_vertical"        android:layout_marginLeft="5dp"        android:layout_weight="1"        android:text="服务评价:"        android:textSize="18sp" />      <RatingBar        android:id="@+id/rb_hotel_evaluate"                android:layout_width="wrap_content"        android:layout_height="20dp"        android:layout_toRightOf="@+id/tv_hotelServer"        android:numStars="5"        android:rating="0"        android:stepSize="1.0" />    </RelativeLayout>    <EditText      android:id="@+id/ed_hotelEvaluate"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:layout_below="@+id/rl_server"      android:background="@drawable/editbox_background_normal"      android:singleLine="true" />  </LinearLayout></RelativeLayout>

布局好了,因为Activity里面的代码写不是很多,直接上代码了,然后在最后分析一下:

package com.bob.lucking.activity;import android.app.Activity;import android.os.Bundle;import android.support.annotation.Nullable;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.RatingBar;import com.bob.lucking.R;public class DynamicAddViewActivity extends Activity implements View.OnClickListener {  private String TAG = this.getClass().getSimpleName();  //装在所有动态添加的Item的LinearLayout容器  private LinearLayout addHotelNameView;  @Override  protected void onCreate(@Nullable Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_dynamic);    addHotelNameView = (LinearLayout) findViewById(R.id.ll_addView);    findViewById(R.id.btn_getData).setOnClickListener(this);    //默认添加一个Item    addViewItem(null);  }  @Override  public void onClick(View v) {    switch (v.getId()) {      case R.id.btn_addHotel://点击添加按钮就动态添加Item        addViewItem(v);        break;      case R.id.btn_getData://打印数据        printData();        break;    }  }    private void sortHotelViewItem() {    //获取LinearLayout里面所有的view    for (int i = 0; i < addHotelNameView.getChildCount(); i++) {      final View childAt = addHotelNameView.getChildAt(i);      final Button btn_remove = (Button) childAt.findViewById(R.id.btn_addHotel);      btn_remove.setText("删除");      btn_remove.setTag("remove");//设置删除标记      btn_remove.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {        //从LinearLayout容器中删除当前点击到的ViewItem         addHotelNameView.removeView(childAt);        }      });      //如果是最后一个ViewItem,就设置为添加      if (i == (addHotelNameView.getChildCount() - 1)) {        Button btn_add = (Button) childAt.findViewById(R.id.btn_addHotel);        btn_add.setText("+新增");        btn_add.setTag("add");        btn_add.setOnClickListener(this);      }    }  }  //添加ViewItem  private void addViewItem(View view) {    if (addHotelNameView.getChildCount() == 0) {//如果一个都没有,就添加一个      View hotelEvaluateView = View.inflate(this, R.layout.item_hotel_evaluate, null);      Button btn_add = (Button) hotelEvaluateView.findViewById(R.id.btn_addHotel);      btn_add.setText("+新增");      btn_add.setTag("add");      btn_add.setOnClickListener(this);      addHotelNameView.addView(hotelEvaluateView);      //sortHotelViewItem();    } else if (((String) view.getTag()).equals("add")) {//如果有一个以上的Item,点击为添加的Item则添加      View hotelEvaluateView = View.inflate(this, R.layout.item_hotel_evaluate, null);      addHotelNameView.addView(hotelEvaluateView);      sortHotelViewItem();    }     //else {     // sortHotelViewItem();    //}  }  //获取所有动态添加的Item,找到控件的id,获取数据  private void printData() {    for (int i = 0; i < addHotelNameView.getChildCount(); i++) {      View childAt = addHotelNameView.getChildAt(i);      EditText hotelName = (EditText) childAt.findViewById(R.id.ed_hotelName);      RatingBar hotelEvaluateStart = (RatingBar) childAt.findViewById(R.id.rb_hotel_evaluate);      EditText hotelEvaluate = (EditText) childAt.findViewById(R.id.ed_hotelEvaluate);      Log.e(TAG, "酒店名称:" + hotelName.getText().toString() + "-----评价星数:"          + (int) hotelEvaluateStart.getRating() + "-----服务评价:" + hotelEvaluate.getText().toString());    }  }}

最后我们来解读一下代码:

onCreate里面初始化控件并设置事件,同时我们默认添加一条item,因为addHotelNameView容器初始化时里面没有子view,所以我们默认给添加的方法传null,

在addViewItem方法时,里面有初始化并设置button方法,所以在onclick方法里面把事件的v传入是为了做标记,也就是设置tag,,在添加时会有两种情况:

1.如果只有一条,我们只能显示添加

2.有多条的情况下,如果点击的是设置有tag为add标记的添加,则添加

如果点击删除,在sortHotelViewItem方法里面已经设置过删除点击事件,直接从内存中删除,

最后是获取数据,我们可以通过LinearLayout容器来遍历addHotelNameView.getChildCount()获取所有添加的item,然后找到控件的id去获取所有添加的item数据。

再这里注释一下:在addViewItem方法里面看到可以优化,上传资源时已经打包好了,现在在这里用单行注释掉了4行,添加第一个item时不需要排序的,还有就是else里面的是死代码,下载资源的朋友些可以删除这几行。

关于如何在Android中动态添加一个view问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网行业资讯频道了解更多相关知识。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何在Android中动态添加一个view

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何在Android中动态添加一个view

如何在Android中动态添加一个view?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
2023-05-30

怎么在Android应用中添加一个添加物品动画

这篇文章将为大家详细讲解有关怎么在Android应用中添加一个添加物品动画,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。开发环境:AndroidStudio2.1.2+gradle-2.10
2023-05-31

基于Android在布局中动态添加view的两种方法(总结)

一、说明 添加视图文件的时候有两种方式:1、通过在xml文件定义layout;2、java代码编写二、前言说明1.构造xml文件2.LayoutInflater提到addview,首先要了解一下LayoutInflater类。这个类最主要的
2023-05-30

如何在Android应用中添加一个按钮功能

这期内容当中小编将会给大家带来有关如何在Android应用中添加一个按钮功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、首先创建一个按钮
2023-05-31

如何在Android应用中添加一个菜单功能

这篇文章将为大家详细讲解有关如何在Android应用中添加一个菜单功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。开发环境:AndroidStudio2.1.2部分代码(Activity)
2023-05-31

如何在Android应用中添加一个日期选择器

这期内容当中小编将会给大家带来有关如何在Android应用中添加一个日期选择器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。具体代码如下所示://出生年月设置private void birthSetti
2023-05-31

如何在Android应用中添加一个自定义弹框

如何在Android应用中添加一个自定义弹框?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实现步骤:1.xml布局实现
2023-05-31

如何在Android中实现一个在图片中添加文字功能

这篇文章给大家介绍如何在Android中实现一个在图片中添加文字功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Android自定义实现图片加文字功能分四步来写: 1,组合控件的xml; 2,自定义组合控件的属性;
2023-05-31

Android viewpager中动态添加view并实现伪无限循环的方法

本文实例讲述了Android viewpager中动态添加view并实现伪无限循环的方法。分享给大家供大家参考,具体如下: viewpager的使用,大家都熟悉,它可以实现页面之间左右滑动的切换,这里有一个需求,就是viewpager里面加
2022-06-06

如何在Android应用中实现一个图片添加功能

如何在Android应用中实现一个图片添加功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、首先这是用GridView实现的2023-05-31

Dreamweaver如何给网站添加一个动态横幅效果

小编给大家分享一下Dreamweaver如何给网站添加一个动态横幅效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!为什么要给网站添加动态横幅?一方面,是图片不容
2023-06-08

如何在Android中利用View实现一个等级滑动条功能

这篇文章将为大家详细讲解有关如何在Android中利用View实现一个等级滑动条功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。思路: 首先绘制直线,然后等分直线绘制点; 绘制点的时候把X
2023-05-31

如何Android项目中创建一个View

这篇文章将为大家详细讲解有关如何Android项目中创建一个View,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。从布局文件到LayoutParams首先从Activity的setConte
2023-05-31

在Android中动态添加Panel框架的实现代码

这里说是框架,说的大了点,其实没有那么复杂,只是一个容易扩展的基类而已。不过至少算是框架类的代码。 代码如下:package arui; import android.app.Activity; import android.os.Ha
2022-06-06

Android中如何给任何view添加全屏倾斜水印

小编给大家分享一下Android中如何给任何view添加全屏倾斜水印,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!如果要实现如下效果目前有两种思路:1.先画出带有
2023-05-30

如何在Android应用中利用SeekBa添加一个进度条功能

如何在Android应用中利用SeekBa添加一个进度条功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。step1、先来看一看PopupWindow的布局文件
2023-05-31

Android实现在一个activity中添加多个listview的方法

本文实例讲述了Android实现在一个activity中添加多个listview的方法。分享给大家供大家参考,具体如下: listview的id一般是这样的android:id="@id/android:list"。请注意,这时的Activ
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录