当我运行我的Activity以显示下面的GridView时,它似乎卡在位置0上.
您可以在屏幕上显示GridView时看到下面的日志.这在第一次加载时工作正常,但是当它滚动时,它似乎试图重用第一个位置(0),即使它仍然在使用并且因空指针异常而崩溃.
为什么要立即重用视图?为什么会认为else连续多次阻塞?适配器是否被扩展FrameLayout的CheckableButton混淆了?
谢谢!
public View getView(int position, View convertView, ViewGroup parent) {
CheckableButton checkableButton;
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(new ViewGroup.LayoutParams(175, 175));
checkableButton = new CheckableButton(mContext);
checkableButton.setLayoutParams(new GridView.LayoutParams(
GridView.LayoutParams.WRAP_CONTENT,
GridView.LayoutParams.WRAP_CONTENT));
checkableButton.addView(imageView);
Log.d("Initiated New View:", "" + position);
}
else {
checkableButton = (CheckableButton) convertView;
imageView = (ImageView) checkableButton.getChildAt(position);
Log.d("Reused View:", "" + position);
}
imageView.setImageBitmap(photos[position]);
return checkableButton;
}
Run Code Online (Sandbox Code Playgroud)
这是Log.d读数
D/Initiated New View :: 0
D /重用View :: 0
D /重用View :: 0
D /重用View :: 0
D/Initiated New View :: 1
D/Initiated New View :: 2
D/Initiated New View :: 3
D/Initiated New View :: 4
D/Initiated New View :: 5
D/Initiated New View :: 6
D/Initiated New View :: 7
D/Initiated New View :: 8
D/Initiated New View :: 9
D/Initiated New View :: 0
D /重用View :: 0
D /重用View :: 0
D /重用View :: 0
D /重用View :: 0
D /重用View :: 0
getView方法中的位置arg实际上是屏幕上显示的每个可见项的索引.因此,例如,如果适配器中有20个项目,则滚动模式下的位置arg在列表末尾变为20.在您的实现中,checkableButton只有一个子节点,因此当位置变得大于checkableButton子视图计数时它会失败.尝试做这样的事情
imageView = (ImageView) checkableButton.getChildAt(0);
Run Code Online (Sandbox Code Playgroud)
因为你的imageView是checkableButton的唯一childView,它可以用0索引访问.
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |