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

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

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;
            }
        }

    }
}

技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。