java - 根据数字程序设置GridView的ImageVIew

标签 java android gridview android-fragments

我正在尝试创建一个图标的 Gridview,并将 Imageview 设置为两个图像之一,如下面的示例所示:

enter image description here

我正在从 sqlite 内容提供程序检索两个值,一个用于邮票数量,另一个用于最大邮票数量。

我使用带有 View 持有者模式的自定义适配器,因此我尝试在 fragment 中设置模型 onLoadFinished() 。我当前尝试的模型是 int[],值中的值为 0 或 1,以确定是否使用绿色图章或灰色图章。但这不起作用,因为 GridView 中没有显示任何内容。

这是 fragment 中 onLoadFinished() 的代码 fragment :

imageSourceModel = new int[data.getInt(data.getColumnIndex(RewardsEntry.COLUMN_REW_MAX_POINTS))];
        int i = data.getInt(data.getColumnIndex(RewardsEntry.COLUMN_REW_POINTS));
        for (int j = 0; j < imageSourceModel.length; j++, i--)   {
            if (i > 0)  {
                imageSourceModel[j] = 1;
            } else  {
                imageSourceModel[j] = 0;
            }
        }
        stampGridAdapter.setModel(imageSourceModel);

以及自定义适配器的代码:

@Override
public View getView(int i, View view, ViewGroup parent) {
    ViewHolder viewHolder;
    if (view == null) {
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.list_item_discover, parent, false);
        viewHolder = new ViewHolder(view);

        view.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) view.getTag();
    }
    if (model[i] > 0)   {
        viewHolder.stampView.setImageResource(R.drawable.ic_approved_stamp);
    } else  {
        viewHolder.stampView.setImageResource(R.drawable.ic_approved_stamp_disabled);
    }
    return view;
}

和简单的 ViewHolder:

private class ViewHolder {
    public ImageView stampView;

    public ViewHolder(View view)    {
        stampView = (ImageView) view.findViewById(R.id.grid_stamp_image);
    }
}

如果我不得不猜测,我会说它失败了,因为创建顺序使得 getView() 在 onLoadFinished() 可以传递模型之前完成。我只是不确定如何解决这个问题或什么我可以使用的其他方法。如有任何帮助,我们将不胜感激。

最佳答案

对于你想要实现的目标,这对我来说似乎没有必要复杂,尤其是双变量循环。为了简单起见,我只需这样做:

在onLoadFinished()中

int maxPoints = data.getInt(data.getColumnIndex(RewardsEntry.COLUMN_REW_MAX_POINTS));
int currentPoints = data.getInt(data.getColumnIndex(RewardsEntry.COLUMN_REW_POINTS));
mGridView.setAdapter(new RewardPointAdapter(getActivity(), currentPoints, maxPoints);

您的适配器可能如下所示:

public class RewardPointAdapter extends BaseAdapter {
    private LayoutInflater mLayoutInflater;
    private int mMaxRewardPoints;
    private int mCurrentRewardPoints;

    public RewardPointAdapter(Context context, int currentRewardPoints, int maxRewardPoints) {
        mLayoutInflater = LayoutInflater.from(context);
        mMaxRewardPoints = maxRewardPoints;
        mCurrentRewardPoints = currentRewardPoints;
    }

    @Override
    public int getCount() {
        return mMaxRewardPoints;
    }

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null) {
            convertView = mLayoutInflater.inflate(R.layout.list_item_discover, parent, false);
            viewHolder = new ViewHolder(convertView);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }
        if (position < mCurrentRewardPoints)   {
            viewHolder.stampView.setImageResource(R.drawable.ic_approved_stamp);
        } else  {
            viewHolder.stampView.setImageResource(R.drawable.ic_approved_stamp_disabled);
        }
        return convertView;
    }

    private class ViewHolder {
        public ImageView stampView;

        public ViewHolder(View view)    {
            stampView = (ImageView) view.findViewById(R.id.grid_stamp_image);
        }
    }

}

关于java - 根据数字程序设置GridView的ImageVIew,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26155616/

相关文章:

java - 如何将文件从特定行读取到另一特定行?

android - 如何动态更改 ListView 的分隔线高度?

android - 将 zxing-2.0 实现到我的 android 应用程序中

android - 在 GridView 适配器 GetView 方法中使用异步方法

c# - 如何在 Gridview 文本上使用大于号?

c# - 如何从 java 中的文件绘制图形(线)?

java - 从脚本导入时如何在数据库中保留特殊字符

java - 如何从 Android Studio 写入 PCD 文件?

javascript - react native : how to get file size, mime 类型和扩展名?

javascript - 组合框过滤后执行回调gridview