0

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

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); 行 - setVisibility 工作正常,在 addContentView 进入后 - 不工作。

addContentView 工作正常,在 addContentView 之前或之后调用 setVisibility - 什么都不做

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

4

2 回答 2

0

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

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

总结: 调用 addContentView --> 刷新所有布局,因此 ListView 也 --> 调用 onItemClick 时传递的视图不再出现在列表中。

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

  • 如果您确实想从列表中删除视图/项目,请执行此操作。看看这里
  • 如果您不想在调用 addContentView 后将其删除,请尝试在列表的对象中设置一个布尔值并将逻辑放在您的 adpater 的 getView 上以显示或不显示它
于 2013-10-02T10:12:20.800 回答
0

我发现不使用 addContentView 的方式,我将其更改为:

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

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

于 2013-10-02T17:50:15.697 回答