使用Hello,World Gridview教程示例,我试图在单击时使图像全屏,而不是在数组中显示图像的位置。由于我对Android不熟悉,这是我第一次尝试使用它,我很茫然。我虽然熟悉Java,但我尝试过这样的事情(显然不起作用):
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(this));
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
showImage(v, position);
Toast.makeText(HelloAndroid.this, "" + parent.getId(), Toast.LENGTH_SHORT).show();
}
});
}
private void showImage(View view, int position) {
ImageView imgView = (ImageView) view;
imgView.setImageResource(position);
}
但应用程序崩溃(强制关闭)。有什么想法吗?
答案 0 :(得分:23)
imgView.setImageResource(position);
这会给您一个错误,因为您没有正确使用它。该参数应该指向图像的资源ID(这是一个int),例如R.id.imageid
。即使您要提供正确的资源ID,您想要做的也不会有效。
要获取正确的资源ID,您需要调用视图的适配器并使用getItemId(position)
方法获取正确的资源ID。在您的ImageAdapter中,如果您将getItemId()
方法更改为返回mThumbsIds[position]
而不是0(如Google的示例中所示)。
但是,为了达到你的结果,我建议你创建一个新的Activity,然后加载这样的图像。
例如:
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
long imageId = (ImageAdapter)parent.getAdapter.getItemAt(position);
Intent fullScreenIntent = new Intent(v.getContext(), FullScreenImage.class);
fullScreenIntent.putExtra(thisClassName.class.getName(), imageId);
thisClassName.this.startActivity(fullScreenIntent);
}
});
假设您创建了一个full_image.xml
布局文件,其中只包含ID为"fullImage"
的ImageView,则您的FullScreenImage类应如下所示:
public class FullScreenImage extends Activity
{
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.full_image);
Intent intent = getIntent();
long imageId = intent.getExtras().get(thisClassName.class.getName());
ImageView imageView = (ImageView) v.findViewById(R.id.fullImage);
imageView.setLayoutParams( new ViewGroup.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT));
imageView.setImageResource(imageId);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
}
}
这些方面的某些内容应该适合你,并进行一些调整。确保将AndroidManifest.xml
文件中的FullScreenImage添加为<activity>
。
答案 1 :(得分:0)
在这里,您将获取点击的视图的ID (在view
参数中传递)并使用它再次查找自己:
ImageView imgView = (ImageView) findViewById(view.getId());
这没有任何意义,特别是因为点击的视图显然 没有ID,导致findViewById
返回null
。
您可能希望传递ImageView
的ID:
ImageView imgView = (ImageView) findViewById(R.id.whatever_the_id_of_the_image_view_is);