【问题标题】:Returning a dynamically specified number of images from an Adapter从适配器返回动态指定数量的图像
【发布时间】:2013-06-03 07:56:51
【问题描述】:

我正在使用带有 GridView 的自定义 ImageAdapter 以显示 4*4 的图像集。 我希望能够动态传递适配器返回的图像数量,到目前为止我看到的教程/问题都是基于预设数量的图像,例如只返回前 30 个。我不确定如何实现一个采用 int 并从数组中返回那么多图像的方法。任何帮助,将不胜感激。非常感谢

这就是我目前将所有图像返回到网格视图的功能。

图像适配器

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

public class ImageAdapter extends BaseAdapter{
    private Context mContext;

// Keep all Images in array
public Integer[] mMona = {
        R.drawable.joconde_1_1, R.drawable.joconde_1_2, R.drawable.joconde_1_3,R.drawable.joconde_1_4,
        R.drawable.joconde_2_1, R.drawable.joconde_2_2, R.drawable.joconde_2_3,R.drawable.joconde_2_4,
        R.drawable.joconde_3_1, R.drawable.joconde_3_2, R.drawable.joconde_3_3,R.drawable.joconde_3_4,
        R.drawable.joconde_4_1, R.drawable.joconde_4_2, R.drawable.joconde_4_3,R.drawable.joconde_4_4,
};

public ImageAdapter(Context c){
    mContext = c;
}

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

@Override
public Object getItem(int position) {
    return mMona[position];
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView = new ImageView(mContext);
    imageView.setImageResource(mMona[position]);
    return imageView;
}

}

活动类

 ImageAdapter imageAdapter = new ImageAdapter(this);
        gridView.setAdapter(imageAdapter);

【问题讨论】:

    标签: android arrays image gridview baseadapter


    【解决方案1】:

    您可以将 int 数组作为 Image Adapter 的参数。该数组在您的图像数组中具有所需图像的位置,创建一个临时数组或要返回的图像。我没有测试过,但我认为我应该工作。 更改代码在这里..

    import android.content.Context;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;    
    import android.widget.ImageView;
    
    public class ImageAdapter extends BaseAdapter{
        private Context mContext;
        Integer []retuning;
    
    // Keep all Images in array
    public Integer[] mMona = {
            R.drawable.joconde_1_1, R.drawable.joconde_1_2, R.drawable.joconde_1_3,R.drawable.joconde_1_4,
            R.drawable.joconde_2_1, R.drawable.joconde_2_2, R.drawable.joconde_2_3,R.drawable.joconde_2_4,
            R.drawable.joconde_3_1, R.drawable.joconde_3_2, R.drawable.joconde_3_3,R.drawable.joconde_3_4,
            R.drawable.joconde_4_1, R.drawable.joconde_4_2, R.drawable.joconde_4_3,R.drawable.joconde_4_4,
    };
    
    
    
    public ImageAdapter(Context c, int ...pos){
        mContext = c;
        //Added this line...
        retuning= new Integer[pos.length];
        for(int i=0;i<pos.length;i++){
            if(i<mMona.length-1){
                retuning[i]=mMona[pos[i]];
            }
        }
    }
    
    @Override
    public int getCount() {
        return retuning.length;
    }
    
    @Override
    public Object getItem(int position) {
        return retuning[position];
    }
    
    @Override
    public long getItemId(int position) {
        return 0;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView = new ImageView(mContext);
        imageView.setImageResource(mMona[position]);
        return imageView;
    }
    }
    

    在你的活动类中调用这个适配器如下..

    int []img={0,2,3,5};
    ImageAdapter imageAdapter = new ImageAdapter(this,img);
    gridView.setAdapter(imageAdapter);
    

    【讨论】:

    • 嘿,感谢您的回复,尝试了此代码,但在 retuning[i]=mMona[pos[i]];
    • 哦.!,对不起。实际上我错过了在代码中初始化retuning数组,现在我已经编辑了这段代码,你可以再试一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多