如何在图像适配器中设置图像资源并在点击监听器上获取该资源

How to set image resource in ImageAdapter and get taht resource on click listner

我想为动态创建的图像设置 id 之类的图像资源或任何名称,但我做不到。这是我的代码:

public class ImageAdapter extends BaseAdapter {
    public Context mContext;
    public String id ;
    public String [] arr;
    public String[] mThumbIds;

    public ImageAdapter(Context c,String id) {
        mContext = c;
        this.id = id;
        arr = this.id.split(",");
        populateArray();
    }

    public void populateArray(){
        mThumbIds = new String[arr.length];
        for(int i= 0; i<arr.length; i++){
            mThumbIds[i] = "http://www.mysiteurl.com?r=index.php"+arr[i];
        }

    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return null;
    }

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

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {
            // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);

        } else {
            imageView = (ImageView) convertView;
        }
        Picasso.with(mContext).load(mThumbIds[position]).into(imageView);
        //imageView.setImageResource(Integer.parseInt(mThumbIds[position]));
        return imageView;
    }
}

我有一个 ID 数组,我将其传入此 class 的构造函数。我想要的是将这些 id 设置为由这段代码创建的我的图像,这样我就可以在这些图像点击侦听器之一上获得该 id。

// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imageView;
    if (convertView == null) {
        // if it's not recycled, initialize some attributes
        imageView = new ImageView(mContext);
        imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        imageView.setPadding(8, 8, 8, 8);

    } else {
        imageView = (ImageView) convertView;
    }
    Picasso.with(mContext).load(mThumbIds[position]).into(imageView);
    //imageView.setImageResource(Integer.parseInt(mThumbIds[position]));
    return imageView;
}

这是我调用 ImageAdapter class 并设置图像点击侦听器的片段。

GridView gridview = (GridView) view.findViewById(R.id.gridview);
gridview.setAdapter(new ImageAdapter(getActivity(),id));

gridview.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View v,
                            int position, long id) {
        ChartPageFragment.fromSearch = true;

        ChartPageFragment newFragment = new ChartPageFragment();
        Bundle args = new Bundle();
        //String arr=v.getTag();
        args.putString("id","34778");
        newFragment.setArguments(args);

        FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();

        // Replace whatever is in the fragment_container view with this fragment,
        // and add the transaction to the back stack so the user can navigate back
        transaction.replace(R.id.fragment_container, newFragment);
        transaction.addToBackStack(newFragment.getClass().getName());
        // Commit the transaction
        transaction.commit();
    }
});

我不知道该怎么做。 提前致谢

使用您在适配器中使用的相同逻辑。拆分字符串 id 并使用 GridViewonItemClick 中的 position 参数获取相应的 id。

试试这个,

private String getClickedItemId(int position){
    // id is the variable containing all your ids
    String [] arr = id.split(",");
    if(position < arr.length)
        return arr[poistion];
    else
        return null;
}

按如下方式在您的 onItemClick 中调用此函数。

@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    ChartPageFragment.fromSearch = true;

    ChartPageFragment newFragment = new ChartPageFragment();
    Bundle args = new Bundle();
    args.putString("id", getClickedItemId(position));
    newFragment.setArguments(args);

    ...
}