我想实现,通过监听点击按钮事件,每点击一次,就往按钮下面的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?
谢谢了!
把你那部分代码移到onClick里面去,也就是这样:
listen1=newOnClickListener(){
publicvoidonClick(Viewv){
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);
}
};
layout2.addView(addView);这里每次add的对象都是同一个view,所以会报错的。你每次add的对象(addView)应该重新创建并赋值,我也是最近学android发现这个问题的。
简单说吧,layout2.addView(addView);后,这个addView就已经有父亲了,当你再执行layout2.addView(addView);时,这个addView就会拥有两个父亲,发生冲突的。所以你应该重新创建一个addView对象。谢谢吖!果然是这样色原因。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。