从ImageAdapter获取图像ID

时间:2014-03-03 10:35:22

标签: android image gridview imageview

我是android的新手,我有一个关于图像网格视图和onclick图像的项目,它显示了它,这就是ImageAdapter类代码

public class ImageAdapter extends BaseAdapter{

    private static LayoutInflater inflater = null;
    private Activity activity;

    private String mode = "";

    int[] images=null ;

    public ImageAdapter(Activity act, String mode , int[] images){
        inflater = (LayoutInflater) act.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        activity = act;
        this.mode = mode;
        this.images= images ;
    }

    public ImageView getImage(int pos)
    {
        ImageView im = (ImageView) getItem(pos);
        return im ;
    }


    @Override
    public int getCount() {
        return images.length;
    }

    @Override
    public Object getItem(int position) {
        return new Integer(images[position]);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        if(mode.equalsIgnoreCase("grid")){
            if (view == null) {
                view = inflater.inflate(R.layout.each_image1, null);
            }
            ImageView iv = (ImageView)view.findViewById(R.id.imageView);
            iv.setImageResource(images[position]);
        } else if(mode.equalsIgnoreCase("gallery")){
            if (view == null) {
                view = inflater.inflate(R.layout.each_image_gallery, null);
            }
            ImageView iv = (ImageView)view.findViewById(R.id.imageView);
            iv.setImageResource(images[position]);
        }
        return view;
    }

}

那是我的网格活动

public class GridActivity extends Activity {


    GridView grid = null;
    public static ImageAdapter adapter1 ;
    public static ImageAdapter adapter2 ;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.grid);
        adapter1= new ImageAdapter(GridActivity.this, "grid" , Images.images1);
        adapter2 = new ImageAdapter(GridActivity.this, "grid" , Images.images2);

          Intent i = this.getIntent();
        if (i!=null)
        {
        String unique = i.getExtras().getString("Unique");
        if (unique.equals("islam"))

                {
        Toast.makeText(GridActivity.this, "islam", Toast.LENGTH_LONG).show();


        grid = (GridView)findViewById(R.id.gridView1);
        grid.setAdapter(adapter1);

                }
        if (unique.equals("natural"))   
        {
            Toast.makeText(GridActivity.this, "nat", Toast.LENGTH_LONG).show();


             grid = (GridView)findViewById(R.id.gridView1);
             grid.setAdapter(adapter2);
        }

        }

        grid.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int pos,long id) {
                Intent i = new Intent(GridActivity.this, imgPrevActivity.class);
                i.putExtra("selectedIntex", pos);
                startActivity(i);

                Toast.makeText(GridActivity.this,"ddd",Toast.LENGTH_LONG).show();


            }
        });
    }
}

这是它假设显示任何点击图像的活动

public class imgPrevActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.each_image1);
        ImageView im = (ImageView)findViewById(R.id.imageView);
        int pos = getIntent().getExtras().getInt("selectedIntex");

        // ImageAdapter adapter = new ImageAdapter(imgPrevActivity.this, "image prev", null);

       long Id= GridActivity.adapter1.getItemId(pos);
       im.setImageResource((int) Id);

    }

}

我试图从网格中点击图像的位置 然后从位置获取Id 并将图像视图设置为该ID

但它不起作用!!

图像放在数组中的那些

public class Images {

    public static int[] images1 = {
        R.drawable.buds, R.drawable.cherry_34,
        R.drawable.clouds_2, R.drawable.coffee_beans_2,
        R.drawable.death_valley_sand_dunes
        };

    public static int[] images2= {
        R.drawable.morning_glory_pool,
        R.drawable.pink_flowers, R.drawable.sun_flower,
        R.drawable.sunrise_3, R.drawable.yellow_rose_3,



    };





}

1 个答案:

答案 0 :(得分:0)

您必须有意图传递您的图片资源ID。适配器的列表项ID无用,因为您在屏幕上有新的活动。

grid.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int pos,long id) {
            Intent i = new Intent(GridActivity.this, imgPrevActivity.class);
            i.putExtra("selectedIntex", grid.getAdapter().getItem(pos);
            startActivity(i);

            Toast.makeText(GridActivity.this,"ddd",Toast.LENGTH_LONG).show();


        }
    });

并在ImgPreviewActivity中更改您的代码:

public class imgPrevActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.each_image1);
    ImageView im = (ImageView)findViewById(R.id.imageView);
    int pos = getIntent().getIntExtra("selectedIntex", 0);
    im.setImageResource(pos);
}

}

我认为应该有效