【问题标题】:Set image from gridview to another activity将图像从 gridview 设置为另一个活动
【发布时间】:2014-11-26 09:21:48
【问题描述】:

我正在创建一个用于查看和共享图像的应用程序,但我不知道如何将所选图像从 gridview 设置为具有 imageview 的 SingleActivity。 请帮我。 任何帮助将不胜感激。

我的完整代码如下。

MainActivity.java

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    gridView = (GridView) findViewById(R.id.gridView);
    customGridAdapter = new GridViewAdapter(this, R.layout.row_grid, getData());
    gridView.setAdapter(customGridAdapter);

    gridView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,
                int position, long id) {
            Intent i = 
                      new Intent(getApplicationContext(), SingleViewActivity.class);
                      // Pass image index
                      i.putExtra("id", position);
                      startActivity(i);
        }

    });

}

private ArrayList<ImageItem> getData() {
    final ArrayList<ImageItem> imageItems = new ArrayList<ImageItem>();
    // retrieve String drawable array
    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, "Image#" + i));
    }

    return imageItems;

}

GridViewAdapter.java

    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 = null;

    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;
}

SingleViewActivity.java

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.single_view);

    Intent i = getIntent();

    // Selected image id
    int position = i.getExtras().getInt("id");
    ImageViewPic = (ImageView)findViewById(R.id.SingleView);
    }

Arrays.xml

<?xml version="1.0" encoding="utf-8"?>

<string-array name="image_ids">
    <item>@drawable/image_1</item>
    <item>@drawable/image_2</item>
    <item>@drawable/image_3</item>
    <item>@drawable/image_4</item>
    <item>@drawable/image_5</item>
    <item>@drawable/image_6</item>
    <item>@drawable/image_7</item>
    <item>@drawable/image_8</item>
    <item>@drawable/image_9</item>
    <item>@drawable/image_1</item>
    <item>@drawable/image_2</item>
    <item>@drawable/image_3</item>
    <item>@drawable/image_4</item>
    <item>@drawable/image_5</item>
    <item>@drawable/image_6</item>
    <item>@drawable/image_7</item>
    <item>@drawable/image_8</item>
    <item>@drawable/image_9</item>
</string-array>

row_grid.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:orientation="vertical"
android:padding="5dp" 
android:clickable="false"
android:background="@drawable/grid_color_selector"
android:focusable="true">

<ImageView
    android:id="@+id/image"
    android:layout_width="100dp"
    android:layout_height="100dp" >
</ImageView>

<TextView
    android:id="@+id/text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
    android:gravity="center"
    android:textSize="12sp" >
</TextView>

【问题讨论】:

  • 有什么问题?
  • 查看link
  • 如何将图像设置为 singleviewActivity 的图像视图?

标签: android textview


【解决方案1】:
Intent i = getIntent(); 
int position = i.getExtras().getInt("id");
ImageViewPic = (ImageView)findViewById(R.id.SingleView);
getData().get(position);
ImageItem item = getData().get(position); 
ImageViewPic .setImageBitmap(item.getImage());

 private ArrayList<ImageItem> getData() {
final ArrayList<ImageItem> imageItems = new ArrayList<ImageItem>();
// retrieve String drawable array
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, "Image#" + i));
}

return imageItems;

 }

【讨论】:

  • 在我们生成 nullpinnterexpection 的数据中
  • 感谢 deepak 的回复。但即使我在 row_grid.xml 文件中设置了“android:clickable=true”,我的图片也无法点击。
  • holder.image.setonclicklistener(){} 这样做
  • 我试试这个,但我在 startActivity(intent) 方法上遇到错误,例如“方法 startActivity(Intent) 未定义新 View.OnClickListener(){} 类型”。
  • 感谢大家的回答。我得到了正确的解决方案。
猜你喜欢
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 2018-02-04
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多