【发布时间】:2016-12-08 20:22:07
【问题描述】:
目前我的项目有一个 GridView,其中每个下都有图像和描述。单击图像时,它应该在一个新活动中打开,其中包含完整的图像和描述。
它目前在模拟器上运行良好,但 onclick 在真实设备上没有任何作用。
如果我在 MainActivity 中将 intent.putExtra("image", item.getImage()) 更改为 intent.putExtra("image", bitmap),它会打开新的辅助 DetailsActivity,但只显示文本而不显示图像。 Logcat 不会显示此更改的错误,只是说“java.lang.Integer 无法转换为 android.os.Parcelable”。
主活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = (GridView) findViewById(R.id.gridView);
gridAdapter = new GridViewAdapter(this, R.layout.grid_item_layout, getData());
gridView.setAdapter(gridAdapter);
gridView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
ImageItem item = (ImageItem) parent.getItemAtPosition(position);
Intent intent = new Intent(MainActivity.this, DetailsActivity.class);
intent.putExtra("title", item.getTitle());
intent.putExtra("image", item.getImage());
startActivity(intent);
}
});
}
private ArrayList<ImageItem> getData() {
final ArrayList imageItems = new ArrayList();
String[] itemsArray = getResources().getStringArray(R.array.grid_ids);
TypedArray imgs = getResources().obtainTypedArray(R.array.image_ids);
for (int i = 0; i < imgs.length(); i++) {
Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), imgs.getResourceId(i, -1));
imageItems.add(new ImageItem(bitmap, itemsArray[i]));
}
return imageItems;
}
详情活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_details);
Intent intent = getIntent();
String title = getIntent().getStringExtra("title");
Bitmap image = getIntent().getParcelableExtra("image");
TextView titleTextView = (TextView) findViewById(R.id.title);
titleTextView.setText(title);
ImageView imageView = (ImageView) findViewById(R.id.image);
imageView.setImageBitmap(image);
ImageItem 类:
public class ImageItem {
public Bitmap image;
public String title;
public ImageItem(Bitmap image, String title) {
super();
this.image = image;
this.title = title;
}
public Bitmap getImage() {
return image;
}
public void setImage(Bitmap image) {
this.image = image;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
GridViewAdapter:
public class GridViewAdapter extends ArrayAdapter<ImageItem> {
private Context context;
private int layoutResourceId;
private ImageView imageView;
private ArrayList<ImageItem> data = new ArrayList<ImageItem>();
public GridViewAdapter(Context context, int layoutResourceId, ArrayList<ImageItem> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.imageTitle = (TextView) row.findViewById(R.id.text);
holder.image = (ImageView) row.findViewById(R.id.image);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
ImageItem item = data.get(position);
holder.imageTitle.setText(item.getTitle());
holder.image.setImageBitmap(item.getImage());
return row;
}
static class ViewHolder {
TextView imageTitle;
ImageView image;
}
图像(在 R.drawable 中)和描述在 strings.xml 中的两个字符串数组中列出。
【问题讨论】:
标签: android gridview textview imageview