这是问题(完整功能代码):
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> av, View v, int arg2, long arg3) {
v.setDrawingCacheEnabled(true);
Bitmap itemBitmap = Bitmap.createBitmap(v.getDrawingCache(true));
v.setDrawingCacheEnabled(false);
itemIV = new ImageView(v.getContext());
itemIV.setImageBitmap(itemBitmap);
ViewGroup.LayoutParams ll = new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
moveX = v.getX() + 2;
moveY = v.getY() - 2;
v.setVisibility(View.GONE);
itemIV.setX(moveX );
itemIV.setY(movey);
addContentView(itemIV, ll); //this line stops v.setVisibility(View.GONE) work
return false;
}
});
没有addContentView(itemIV,ll); line - setVisibility工作正常,在addContentView输入后 - 不起作用。
addContentView工作正常,setVisibility调用addContentView之前或之后的地方 - 什么都不改变
请帮助我,我真的很困惑。
答案 0 :(得分:0)
这是一个复杂的问题,但很有趣。
事实上,您正在从列表侦听器调用addContentView。所以整个布局刷新。 listView刷新,您的项目将重新填充。因此,对onItemLongClick方法的视图v的引用不再是对屏幕上显示的视图的引用。
摘要: 调用addContentView - &gt;刷新所有布局,以便ListView也 - &gt;您在onItemClick调用时传递的视图不再在列表中。
所以我看到两个解决方案:
答案 1 :(得分:0)
我发现不使用addContentView的方式,我改变它:
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.listlay);
linearLayout.addView(itemIV,ll);
结果看起来类似,放置有些问题,但setVisibility工作正常,所有听众都工作正常(也是问题)