动态添加View组件出错

剑麟 发布于 2013/06/20 22:09
阅读 1K+
收藏 0

我想实现,通过监听点击按钮事件,每点击一次,就往按钮下面的layout添加一个自定义View。

可是当我点击第二次的时候,就报错了,错误如下:

就是说要removeView后才可以继续添加View,可是如果调用了removeView的方法后,就达不到动态添加View的目的了。

我的代码如下:

public void onCreate(Bundle savedInstanceState) { 
		super.onCreate(savedInstanceState); 
		//setContentView(R.layout.main); 
		final LinearLayout layout2=new LinearLayout(this); 
		layout2.setOrientation(LinearLayout.VERTICAL); 
		Button btn1=new Button(this); 
		setContentView(layout2); 
		btn1.setText("Button1");  
		layout2.addView(btn1);  
		
		addView = getLayoutInflater().inflate(R.layout.child, null);
		tv = (TextView)addView.findViewById(R.id.tv);
		img = (ImageView)addView.findViewById(R.id.img);
		img.setImageResource(R.drawable.logo);
		
		listen1 = new OnClickListener() { 
			public void onClick(View v) { 				
				tv.setText("ADD");
				layout2.addView(addView);
			} 
		}; 
		btn1.setOnClickListener(listen1); 
	}
谁能告诉我这是怎么回事吗?

该怎样才可以实现动态添加自定义View?

谢谢了!

加载中
0
kenping
kenping

把你那部分代码移到onClick里面去,也就是这样:

listen1 = new OnClickListener() {
    public void onClick(View v) {
        addView = getLayoutInflater().inflate(R.layout.child, null);
        tv = (TextView)addView.findViewById(R.id.tv);
        img = (ImageView)addView.findViewById(R.id.img);
        img.setImageResource(R.drawable.logo);
        tv.setText("ADD");
        layout2.addView(addView);
    }
};

剑麟
剑麟
还真是这样子,搞了好几天了,现在终于解决了,谢谢。
0
黄龍
黄龍

layout2.addView(addView);这里每次add的对象都是同一个view,所以会报错的。你每次add的对象(addView)应该重新创建并赋值,我也是最近学android发现这个问题的。

0
黄龍
黄龍
简单说吧,layout2.addView(addView);后,这个addView就已经有父亲了,当你再执行layout2.addView(addView);时,这个addView就会拥有两个父亲,发生冲突的。所以你应该重新创建一个addView对象。
剑麟
剑麟
谢谢吖!果然是这样色原因。
返回顶部
顶部