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

为合肥等地区用户提供了全套网页设计制作服务,及合肥网站建设行业解决方案。主营业务为网站建设、成都做网站、合肥网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
再看看要添加的item_hotel_evaluate里面的布局:
布局好了,因为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;
/**
* Created by bob on 2017/3/20.
*/
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;
}
}
/**
* Item排序
*/
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问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。