安卓动态添加删除多个控件

新手上路,没找到动态添加删除多个控件,捣鼓了个,做错的地方麻烦大家说下

activity_main.xml:

<Button
        android:id="@+id/add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="myclick"
        android:text="add" />
<!-- 动态添加处 -->
    <LinearLayout
        android:id="@+id/addlayout"
        android:layout_width="match_parent"
        android:layout_above="@+id/surebutton"
        android:layout_height="match_parent"
        android:layout_below="@+id/add"
        android:orientation="vertical" >
    </LinearLayout>

<Button
        android:id="@+id/surebutton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:onClick="myclick"
        android:text="确定" />

<!-- 添加对象是一个布局文件 -->

addlayout.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

<Button
        android:id="@+id/delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:layout_alignParentRight="true"
        android:background="@drawable/delete"
        android:onClick="myclick" />

<Button
        android:id="@+id/unit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/delete"
        android:layout_toLeftOf="@+id/delete"
        android:onClick="myclick"
        android:text="无" />

<EditText
        android:id="@+id/edittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/delete"
        android:layout_toLeftOf="@+id/unit" />

</RelativeLayout>

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

public class MainActivity extends Activity implements OnClickListener {
    LinearLayout ll;

  //我用List添加多个对象后不能正常删除控件,如果有人知道怎么做麻烦告诉我一下,新手小白一枚。。。
    Map<Integer, Button> deletebutton;
    Map<Integer, Button> unitbutton;
    Map<Integer, EditText> edittext;
    Map<Integer, View> vi;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ll = (LinearLayout) findViewById(R.id.addlayout);
        deletebutton = new HashMap<Integer, Button>();
        unitbutton = new HashMap<Integer, Button>();
        edittext = new HashMap<Integer, EditText>();
        vi = new HashMap<Integer, View>();

}
  //获取添加对象
    public View getPartView() {
        return LayoutInflater.from(this).inflate(R.layout.addlayout, null);
    }

int tag = 0;//循环

public void myclick(View v) {
        switch (v.getId()) {
        case R.id.add:
            View view = getPartView();
            // 添加右边删除按钮
            Button button = (Button) view.findViewById(R.id.delete);
            button.setBackgroundResource(R.drawable.delete);

    //之所以用tag不用id的原因是监听的时候id和别的控件重复,别的控件能响应到设置的id
            button.setTag(tag);
            button.setOnClickListener(this);
            deletebutton.put(tag, button);
            // 中间按钮,想换成Spinner,现在没做,可忽略
            Button changebutton = (Button) view.findViewById(R.id.unit);
            changebutton.setOnClickListener(this);
            unitbutton.put(tag, changebutton);
            // 添加输入框
            EditText edit = (EditText) view.findViewById(R.id.edittext);
            edittext.put(tag, edit);
            ll.addView(view);//将view对象添加到布局文件
            vi.put(tag, view);
            System.out.println("addtag:" + tag);
            tag++;
            break;
        case R.id.surebutton:
            Iterator iter = edittext.entrySet().iterator();
            while (iter.hasNext()) {
                Entry entry = (Entry) iter.next();
                System.out.println(entry.getKey() + ":"
                        + ((EditText) entry.getValue()).getText().toString());
            }
        default:
            break;
        }
    }

@Override
    public void onClick(View v) {

    //hashmap的循环遍历方式
        Iterator iter = deletebutton.entrySet().iterator();
        while (iter.hasNext()) {
            Entry entry = (Entry) iter.next();
            if (v.getTag().equals(entry.getKey())) {
                ll.removeView(vi.get(v.getTag()));
                deletebutton.remove(v.getTag());
                unitbutton.remove(v.getTag());
                edittext.remove(v.getTag());
                break;
            }
        }

}
}

时间: 2024-10-07 02:08:55

安卓动态添加删除多个控件的相关文章

动态添加HTML表单控件,无(runat=&quot;server&quot;)

JS部分<script> var allChildCount; //整个模块 allChildCount = 1; var sTxt = "<%=htmlselectName%>"; function addChildModel() { allChildCount++; var rown = filetb.rows.length; newRow = filetb.insertRow(rown); newRow.id = "mytdb" + a

VC/MFC 工具栏上动态添加组合框等控件的方法

引言 工具条作为大多数标准的Windows应用程序的一个重要组成部分,使其成为促进人机界面友好的一个重要工具.通过工具条极大方便了用户对程序的操作,但是在由Microsoft Visual C++开发环境所创建的应用程序框架中的工具条只是一个简单的按钮的集合,在功能上也仅仅是起到了菜单快捷方式的作用,而没有做到象VC.Word等软件的工具条那样,提供多种不同类型的标准控件如组合框.编辑框等.尤其是组合框在添加到工具条上后,可将原本需要在弹出对话框中完成的交互操作在工具条上就可以进行,从而在很大程

为节省内存,动态添加view布局和控件

1如果一个自定义view要在短时间被多次调用,会造成多次读取xml和findViewById,所以动态添加控件.属性 RelativeLayout: private void initView() { Button btn1 = new Button(this.getContext()); btn1.setId(1); RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(RelativeLayout.Layo

asp.net 动态添加多个用户控件

动态添加多个相同用户控件,并使每个用户控件获取不同的内容. 用户控件代码: 代码WebControls using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace xuyuanwang.myControl { public partial class Lable

jquery动态添加删除div--事件绑定,对象克隆

我想做一个可以动态添加删除div的功能.中间遇到一个问题,最后在phpchina问答区版主的热心帮助下解答了(答案在最后)        使用到的jquery方法和思想就是:事件的绑定和销毁(unbind),另外还可以使用clone,通过克隆可以很好的解决这个问题          相关描述如下 功能:点击增加,自动添加一个iptdiv 点击 iptdiv后的 X 自动删除当前div 问题:默认存在的(也就是页面加载进来的)的那个iptdiv 后的 X 点击有效,可以删除当前 iptdiv  但

asp.net动态加载ascx用户控件

原文:asp.net动态加载ascx用户控件 在主aspx/ascx文件中,将目标ascx1,ascx2控件拖拉到其页面中,然后删除,目的是要生成:Register 代码,然后在主文件中定义DIV或Td之类的,设置ID ,runat="server",接下来LoadControl("ascx1") <%@ Control Language="C#" AutoEventWireup="true" CodeFile=&quo

通过编写串口助手工具学习MFC过程&mdash;&mdash;(六)添加Edit编辑框控件

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (六)添加Edit编辑框控件 属性说明: Auto HScroll 设置T

iOS tableView侧滑删除的第三方控件

(到我的文件中,下载"tableview中cell测滑删除的第三方控件"),使用方法如下: 在tableView中的.m中,设置cell的方法上,事例代码如下,其中,EaseConversationCell继承于LYSideslipCell: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *CellIden

jquery动态添加删除一行数据

<html> <head> <title>添加.删除一行</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="../js/jquery-1.9.1.js"></script>