如何点击android中图像的网格视图

时间:2016-08-06 19:49:20

标签: android

嗨我有图像网格视图的代码,当我点击网格的每个图像时,它打开空布局 但我想当我点击第一张图片,所以用更大的尺寸打开它我的意思是调用我点击的相同图像 这是主要的代码

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;

public class fitgridview extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fitgridview);
        GridView gridView = (GridView)findViewById(R.id.gridview);
        gridView.setAdapter(new MyAdapter(this));
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                // Send intent to SingleViewActivity
                Intent i = new Intent(getApplicationContext(), SingleViewActivity2.class);

                // Pass image index
                i.putExtra("id", position);
                startActivity(i);
            }
        });
    }
}

这是myAdapter java类的代码: -

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by lenovo on 06/08/2016.
 */
public class MyAdapter extends BaseAdapter {
    private final List<Item> mItems = new ArrayList<Item>();
    private final LayoutInflater mInflater;

    public MyAdapter(Context context) {
        mInflater = LayoutInflater.from(context);

        mItems.add(new Item("Red",       R.drawable.ic_menu_camera));
        mItems.add(new Item("Magenta",   R.drawable.ic_menu_gallery));
        mItems.add(new Item("Dark Gray", R.drawable.ic_menu_manage));
        mItems.add(new Item("Gray",      R.drawable.ic_menu_send));
        mItems.add(new Item("Green",     R.drawable.ic_menu_share));
        mItems.add(new Item("Cyan",      R.drawable.ic_menu_slideshow));
        mItems.add(new Item("Red",       R.drawable.ic_menu_camera));
        mItems.add(new Item("Magenta",   R.drawable.ic_menu_gallery));
        mItems.add(new Item("Dark Gray", R.drawable.ic_menu_manage));
        mItems.add(new Item("Gray",      R.drawable.ic_menu_send));
        mItems.add(new Item("Green",     R.drawable.ic_menu_share));
        mItems.add(new Item("Cyan",      R.drawable.ic_menu_slideshow));

    }

    @Override
    public int getCount() {
        return mItems.size();
    }

    @Override
    public Item getItem(int i) {
        return mItems.get(i);
    }

    @Override
    public long getItemId(int i) {
        return mItems.get(i).drawableId;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        View v = view;
        ImageView picture;
        TextView name;

        if (v == null) {
            v = mInflater.inflate(R.layout.grid_item, viewGroup, false);
            v.setTag(R.id.picture, v.findViewById(R.id.picture));
            v.setTag(R.id.text, v.findViewById(R.id.text));
        }

        picture = (ImageView) v.getTag(R.id.picture);
        name = (TextView) v.getTag(R.id.text);

        Item item = getItem(i);

        picture.setImageResource(item.drawableId);
        name.setText(item.name);

        return v;
    }

    private static class Item {
        public final String name;
        public final int drawableId;

        Item(String name, int drawableId) {
            this.name = name;
            this.drawableId = drawableId;
        }
    }
}

这是SquareImageView java类: -

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;

/**
 * Created by lenovo on 06/08/2016.
 */
public class SquareImageView extends ImageView {
    public SquareImageView(Context context) {
        super(context);
    }

    public SquareImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SquareImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth()); //Snap to width
    }
}

我点击它后如何调用每个图像?我应该在SingleViewActivity2中写什么来做我想做的事情  帮帮我,非常感谢

2 个答案:

答案 0 :(得分:1)

首先,适配器只保存一个列表。您可以从活动添加对象并在其中传递列表。

在代码中,

// Fields 
private List<Item> mItems = new ArrayList<Item>();
private MyAdapter mAdapter;

// onCreate
mAdapter = new MyAdapter(this, mItems);
gridView.setAdapter(mAdapter);

现在,如果你改为ArrayAdapter<Item>而不是BaseAdapter,你可以利用一些有用的方法。例如,

mAdapter.add(new Item(...));

现在,建议您研究如何做public class Item implements Parcelable,这超出了本答案的范围。

完成后,您可以在活动

之间传递Parcelable个对象
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            // Send intent to SingleViewActivity
            Intent i = new Intent(getApplicationContext(), SingleViewActivity2.class);

            // Pass image item 
            i.putExtra("item", mAdapter.getItem(position));
            startActivity(i);
        }
    });

答案 1 :(得分:0)

将对象从activity传递给适配器,然后渲染。

目前你正在从适配器创建和渲染对象,这是一种编程习惯。

当您从活动传递对象时,您可以将具有意图的对象传递给下一个活动,您将达到您的要求。

这是解决问题的唯一方法。