是什么促成了内存中单个对象的大小?
我知道原语和引用会,但还有什么吗?方法的数量和长度是否重要?
要理解这个问题,首先要阅读此方法的工作原理.
我正在尝试实现拖放ListView,它没有问题,但已经遇到了障碍.所以,我没有处理的一切,我拦截(但返回false)MotionEvents发送到ListView,让它处理滚动之类的东西.当我想开始拖动一个项目时,我返回true并处理所有拖动的东西.除了一件事,一切都很好.当确定长按(在onInterceptTouchEvent中)时,启动拖动(拖放).我得到了像我这样拖动的图像的Bitmap.itemPositition是所选项目的索引.
(省略不相关的部分)
...
View dragItem = mListView.getChildAt(itemPosition);
dragItem.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(dragItem.getDrawingCache());
mDragImage = new ImageView(mContext);
mDragImage.setImageBitmap(bitmap);
...
Run Code Online (Sandbox Code Playgroud)
问题是,mDragImage是一个像这样的纯黑色.

但是,如果我不让ListView处理任何事情.就像在,我开始在ACTION_DOWN上拖动并在ACTION_UP上停止,mDragImage看起来已经预期(但我显然失去了滚动功能).

由于拖动是通过长按开始的,因此ListView有机会在长按之前执行操作.这是我猜测为什么会发生这种情况的原因.按下某个项目时,ListView会突出显示该项目.在这样做的某个地方,它正在搞乱位图.因此,当我去获取它时,它处于一种奇怪的状态(全黑).
我看到两种解决这个问题的方法,我都不知道怎么做.
从头开始创建图像.
自己处理突出显示(如果这是问题).
对我来说,选项二似乎更好,除了我查看了文档和源代码,但无法找到如何执行此操作.以下是我做过/试过的一些事情.
我用一个空方法设置setOnItemClickListener(...)和 setOnItemSelectedListener(...)(突出显示仍然发生).(在任何人建议之前,调用 setOnClickListener会导致运行时错误.)
我还试图让ListView创建一个新项目(对于选项2),但找不到方法.
花了45分钟查看源代码和文档,试图找出突出显示的位置(我从未找到它).
任何帮助解决这个问题将不胜感激.
(EDIT1 START)
所以我实际上并不知道onLongClickListener是否正常工作,我在思考它之前犯了一个错误.我正在尝试立即设置它,当我发现它是否确实时会更新.
(EDIT1 END)
发布前的最后一分钟编辑.我刚刚尝试使用onLongClickListener,图像很好.我还是想知道是否还有其他办法.我如何使用onLongClickListener来使事情工作是丑陋的,但它的工作原理.我也花了很多时间试图解决这个问题,找到答案会很高兴.我仍然希望能够更改/处理高光颜色,默认的橙色颜色并不漂亮.哦,抱歉帖子的长度.我想不出让它缩短的方法,同时提供我认为需要的所有信息.