我在ScrollView内的另一个LinearLayout中有一个LinearLayout ll
<ScrollView
android:layout_width="270px"
android:layout_height="fill_parent" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/gifcreator_thumbs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical" />
<Button
android:id="@+id/gifcreator_add"
android:layout_width="250px"
android:layout_height="125px"
android:layout_margin="10px"
android:textColor="#000000"
android:text="Добавить кадр" />
</LinearLayout>
</ScrollView>
在onCreate
我正在运行update_frames()方法:
public void update_frames(String a)
{
Log.e("EmSy", "Updating Frame @ " + a);
try
{
File f = new File(a);
tag = ll.getChildCount();
View v = getLayoutInflater().inflate(R.layout.gifcreator_item, null);
v.setTag(tag);
v.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View v)
{
delete_frame(Integer.parseInt(v.getTag().toString()));
return true;
}
});
ImageView thumb = (ImageView)v.findViewById(R.id.gircreator_item_thumb);
TextView desc = (TextView)v.findViewById(R.id.gifcreator_item_desc);
Bitmap t = BitmapFactory.decodeFile(a);
Bitmap t2 = Bitmap.createScaledBitmap(t, 110, 110, false);
thumb.setImageBitmap(t2);
desc.setText("Кадр №" + tag);
data.add(new GIFFrame(t, 42, a));
ll.addView(v);
}
catch (Exception e)
{
Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
以下是delete_frame
方法:
public void delete_frame(int tag_for_deleting)
{
try
{
ll.removeAllViews();
data.remove(tag_for_deleting);
temp_data = data;
data.clear();
for (GIFFrame gf : temp_data)
{
update_frames(gf.p);
frames.notify();
}
temp_data.clear();
}
catch (Exception e)
{
Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
因此,在执行delete_view
方法之前,所有视图都已添加,但在执行该方法后,视图不会添加到ll
。我的代码在ll.addView(v)
行停止,所以我在LogCat中有文件的路径:
`ru.mso.gb - EmSy - Updating Frame @ /sdcard/pic.png`
为什么它不起作用?
答案 0 :(得分:0)
在你的代码中,当你长视图时,主要的想法是删除视图,虽然你似乎删除了所有视图,delete_frame(int tag_for_deleting)
应删除一个视图,而不是所有视图,如此行所做的ll.removeAllViews();
获取视图的索引,然后执行此操作
ll.removeViewAt(index)
编辑:
再次阅读您的代码后,看起来当您要删除1行时,删除所有内容并从头开始构建布局,这是BAD
,非常糟糕,而是删除要删除的一个视图我在上面发布的一行,并从arraylist中删除了一个信息,就是它
答案 1 :(得分:0)
这里的问题
temp_data = data;
data.clear();
您只需添加对数据的新引用,然后将其清除。这意味着循环中的代码永远不会运行。
您可以执行以下操作 替换
temp_data = data;
使用
temp_data = new ArrayList<your type here>(data)