我正在进行水平滚动,最初只有一个framelayout
。在framelayout中,我有imageview和imagebutton。用户单击framelayout以从相机库添加图像。选择并加载图像后,它会使新的framelayout膨胀并向右添加新的framelayout(imageview和imagebutton)。目前,我允许用户最多加载5张图片。 ImageButton允许用户删除选定的framelayout。
每个虚增的framelayout
都有id,我会继续跟踪它。我的问题如下:
当用户删除第一张图像时,我的第二张图像(framelayout)会替换但仍保持相同的ID。有没有办法用布局中的位置动态更改视图ID?
换句话说,如果我的framelayout
位置根据用户操作更新(例如删除操作),那么我希望分配的ID也会更新。
图片加载和删除
@Override
public void onClick(View v) {
if(v instanceof NetworkImageView) {
clickedView = (NetworkImageView)v;
showDialog(this);
}
else if(v instanceof ImageButton) {
layout.removeViewAt(v.getId());
totalImageCount--;
}
}
充气并添加新的FrameLayout
if (requestCode == 1 && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
Uri filePath = data.getData();
selectedPath = getRealPathFromURI(filePath);
ImageUtil.setPic(clickedView, selectedPath);
if(clickedView.getId() == totalImageCount && totalImageCount < 4)
{
newImageView(clickedView.getId() + 1);
totalImageCount++;
}
private void newImageView(int id) {
LayoutInflater inflater = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rl = inflater.inflate(R.layout.relative_image, null);
NetworkImageView niv = (NetworkImageView) rl.findViewById(R.id.imageViewAdd);
niv.setOnClickListener(this);
niv.setId(id);
ImageButton imgBtn = (ImageButton) rl.findViewById(R.id.imageBtnClose);
imgBtn.setOnClickListener(this);
imgBtn.setId(id);
rl.setId(id);
ImageLoader imageLoader = CustomVolleyRequest.getInstance(this.getApplicationContext())
.getImageLoader();
imageLoader.get(Config.IMAGE_PATH_URL, ImageLoader.getImageListener(niv,
R.drawable.image, android.R.drawable
.ic_menu_camera));
niv.setImageUrl(selectedPath, imageLoader);
layout.addView(rl, id);
}
relative_image.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relative"
android:layout_width="100dp"
android:layout_height="100dp" >
<com.android.volley.toolbox.NetworkImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/imageViewAdd"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
android:background="@color/colorAccent"
android:contentDescription="@string/description" />
<ImageButton
android:id="@+id/imageBtnClose"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_gravity="right"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:src="@drawable/ic_close_black_24dp" />
</FrameLayout>
答案 0 :(得分:1)
您的代码存在许多非常严重的问题。我将开始滥用id
s。
您不应将id
属性用于此目的。考虑到您坚持使用相同的机制删除图片,最好使用tag
属性。保持id
完好无损,并更改tag
的{{1}}值。这样,当您删除图片时,您的代码就会变成imgBtn
。您的代码中的另一个问题是您为多个小部件提供相同的ID。这绝不会在应用程序中发生,因为它很难跟踪不同的对象,尽管在您的应用程序中它没有造成任何损害。
我认为有更好的方法来执行你想做的事情。在layout.removeViewAt(Integer.parse(v.getTag().toString()));
功能中,删除更改newImageView
的行。然后你点击功能变成这样:
id
此代码应该照顾您的应用程序。