Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在单击另一个按钮时删除动态创建的imageview?_Java_Android - Fatal编程技术网

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不工作,如果工作则不删除:(