Java 如何在单击另一个按钮时删除动态创建的imageview?
我已经创建了一个动态的Java 如何在单击另一个按钮时删除动态创建的imageview?,java,android,Java,Android,我已经创建了一个动态的ImageView,就像下面的图片一样。它工作得很好。现在我想在单击上十字ImageView时删除视图。当我点击时,它崩溃了。请帮助如何实现它。 这就是我所做的 private void postImage(List<Uri> urilist) { for(int i=0; i< urilist.size(); i++) { imgView = new ImageView(getActivity()); Line
ImageView
,就像下面的图片一样。它工作得很好。现在我想在单击上十字ImageView
时删除视图。当我点击时,它崩溃了。请帮助如何实现它。
这就是我所做的
private void postImage(List<Uri> urilist) {
for(int i=0; i< urilist.size(); i++) {
imgView = new ImageView(getActivity());
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(150, 150);
lp.setMargins(20,10,20,10);
imgView.setLayoutParams(lp);
imgView.setId(i);
Log.d("uri list in loop",""+urilist.get(0));
Glide.with(getActivity())
.load(urilist.get(i))
.into(imgView);
layout.addView(imgView);
imgView1 = new ImageView(getActivity());
LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams(50, 50);
lp1.setMargins(0,5,1,80);
imgView1.setLayoutParams(lp1);
imgView1.setId(i);
Log.d("uri list in loop",""+urilist.get(0));
Glide.with(getActivity())
.load(R.drawable.ic_action_cross)
.into(imgView1);
layout.addView(imgView1);
}
imgView1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
layout.removeViewAt(v.getId());
}
});
}
private void postImage(列表){
对于(int i=0;i
我是说@shakac,你可以这样试试
for(int i = 0; i<layout.getChildCount(); i++)
{
if (layout.getChildAt(i).getId() == v.getId()){
layout.removeView(layout.getChildAt(i));
break;
}
}
对于(inti=0;i我的意思是@shakac,你可以这样尝试
for(int i = 0; i<layout.getChildCount(); i++)
{
if (layout.getChildAt(i).getId() == v.getId()){
layout.removeView(layout.getChildAt(i));
break;
}
}
for(int i=0;i如果是因为索引(在删除第二项时肯定会崩溃),那么您可以在下面尝试
imgView1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewGroup parentView = (ViewGroup) v.getParent();
parentView.removeView(v);
}
});
注意:您不应该将两个视图的id设置为相同。而应该使用一些数学公式。如果是因为索引(删除第二项时肯定会崩溃),那么您可以在下面尝试
imgView1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewGroup parentView = (ViewGroup) v.getParent();
parentView.removeView(v);
}
});
注意:您不应该将两个视图的id设置为相同的。而应该使用一些数学公式。如果使用RecycleView,会更容易。您的崩溃是什么?RemoveViewAt希望您提供索引。但是您提供了一个id。因此,您可以尝试使用for循环查找视图,然后使用id删除。顺便说一句,您使用了错误的id。因为您单击的视图是交叉按钮,而不是要删除的图像视图。您能否在问题中分享崩溃错误,因为我认为v.getId()
它不例外。以下是crush java.lang.NullPointerException:尝试调用虚拟方法“void android.view.view.unFocus(android.view.view)”'在空对象引用上使用RecycleView会更容易。崩溃是什么?RemoveViewAt希望从您那里获得索引。但是您提供了一个id。因此,您可以尝试使用for循环查找视图,然后使用id删除。顺便说一句,您使用了错误的id。因为您单击的视图是交叉按钮,而不是要删除的图像视图e、 您能否在问题中分享崩溃错误,因为我认为v.getId()
它不能作为例外情况工作。下面是crush java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.view.view.unFocus(android.view.view)”。仅删除第一项:(其他项不删除可以用“ViewCompat.generateViewId()”代码更改“.setId(i)”部分吗?它可以工作,但从右侧。如果我想随机删除,假设第二个imageview不工作,如果工作,则交叉不删除:(它只删除第一项:(其他项不删除可以用“ViewCompat.generateViewId()”代码?它可以工作,但从右侧开始。如果我想删除random,假设第二个imageview不工作,如果工作则不删除:(