setVisibility不适用于addContentView

时间:2013-10-01 10:18:15

标签: android

这是问题(完整功能代码):

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之前或之后的地方 - 什么都不改变

请帮助我,我真的很困惑。

2 个答案:

答案 0 :(得分:0)

这是一个复杂的问题,但很有趣。

事实上,您正在从列表侦听器调用addContentView。所以整个布局刷新。 listView刷新,您的项目将重新填充。因此,对onItemLongClick方法的视图v的引用不再是对屏幕上显示的视图的引用。

  

摘要:   调用addContentView - &gt;刷新所有布局,以便ListView也 - &gt;您在onItemClick调用时传递的视图不再在列表中。

所以我看到两个解决方案:

  • 如果您确实要从列表中删除视图/项目,请执行此操作。看看here
  • 如果您不想在调用addContentView后删除它,请尝试在列表对象中设置一个布尔值,并将逻辑放在您的adpater的getView上以显示它

答案 1 :(得分:0)

我发现不使用addContentView的方式,我改变它:

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.listlay);
linearLayout.addView(itemIV,ll);

结果看起来类似,放置有些问题,但setVisibility工作正常,所有听众都工作正常(也是问题)