我SurfaceView
在我的第一个活动中使用。使用 单击图像SurfaceView
时,我会转到第二个活动,该活动还存储最近单击的图像的路径。在第二个活动中,我想在Gallery
.
在单击按钮的第二个活动中,我再次移至第一个活动,单击图片后,我移至第二个活动。
现在在第二个活动中,将有 2 个图像应该显示在Gallery
.
我的问题是单击第一张图片后,Gallery
没有显示任何内容。请注意,getView()
设置为的适配器Gallery
被调用。
但是在点击第 2 张图片之后,当 中有 2 张或更多图片时Gallery
,它们会被显示出来。
我也试过g.refreshDrawableState();
之后
g.setAdapter(new ImageAdapter(this));
g.setOnItemClickListener(this);
g.setSelection(0, false);
但无济于事。
我知道我在这里写的东西听起来很复杂,但试着想象一下这个场景。
任何帮助表示赞赏。
编辑
ImageAdapter.java
public class ImageAdapter extends BaseAdapter {
public ImageAdapter(Context c) {
mContext = c;
}
public int getCount() {
return mImageIds.length;//mImageIds is Array of image paths
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(mContext);
final String imageUri = mImageIds[position].trim();
try {
if (imageUri.length() != 0) {
File f = new File(imageUri);
if (f.exists()) {
b = constants.shrinkBitmap(f.getPath(), 800, 800);
d = new BitmapDrawable(getResources(), b);
i.setImageDrawable(d);
} else {
i.setBackgroundColor(Color.WHITE);
i.setImageResource(R.drawable.ic_launcher);
}
} else {
i.setBackgroundResource(R.drawable.ic_launcher);
}
} catch (Exception e) {
e.printStackTrace();
}
i.setAdjustViewBounds(true);
//BELOW "length" is some predefined value
i.setPadding(Math.round(length * 0.05f), 0,
Math.round(length * 0.05f), 0);
i.setLayoutParams(new Gallery.LayoutParams(Math
.round(length * 0.9f),
LayoutParams.WRAP_CONTENT));
i.setScaleType(ScaleType.FIT_XY);
return i;
}
}
编辑 (2)
在Vikram的建议之后,我尝试记录长度值,第一次确实为0,即调用时i.setLayoutParams(new Gallery.LayoutParams(Math.round(length * 0.9f),LayoutParams.WRAP_CONTENT));
我通过这种方式设置了这个length
变量onCreate()
:
g.post(new Runnable() {
public void run() {
length = g.getRight() - g.getLeft();
}
});
因为我想在代码中检索父布局的宽度并相应地设置图库项目宽度。
我知道我得到length
0 的原因是setContentView()
需要一些时间才能生效。在调用适配器之前如何检索?