多种选择的Android图标/图像设置模式



如果我有 ListViewImageView和500个可以在该ImageView上设置的不同图标,则必须使用什么模式。我应该只编写/switch语句,还是还有另一种方法/模式要做?预先感谢!

让我假设您知道要加载到ImageView中的图标(我的意思是图标的名称),并且这些图标可在您的可绘制资源文件夹中可用。在这种情况下

@Override
public void onBindViewHolder(final RecyclerAdapter.ViewHolder holder, int position) {
    DataItem dataItem = dataList.get(holder.getAdapterPosistion());
    try {
        int resID = activityContext.getResources().getIdentifier(dataItem.getIconName() , "drawable"/**resource folder name*/, activityContext.getPackageName());
        holder.imageView.setBackgroundResource(resID);
    } catch (Exception e) {
        throw new RuntimeException("Error getting Resource ID.", e)
    }
}

您要设置的这些图标在哪里?您是从服务器中获取它们的,还是将其存储在您的应用程序文件中?还是他们来自用户电话库?

这是您想要的适配器的代码:

public class MyAdapter extends BaseAdapter {
    private Context mContext;
    private LayoutInflater mInflater;
    private ArrayList<String> mIconNames;
    public MyAdapter(Context context) {
        mContext = context;
        mIconNames = getIconNames();
        mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() {
        return mIconNames.size();
    }
    @Override
    public Object getItem(int position) {
        return mIconNames.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // Get view for row item
        View rowView = mInflater.inflate(R.layout.your_layout, parent, false);
        ImageView thumbnailImageView =
                (ImageView) rowView.findViewById(R.id.your_image_view_id);
        Picasso.with(mContext).load(mIconNames.get(position)).placeholder(R.mipmap.ic_launcher).into(thumbnailImageView);
        return rowView;
    }
    //this method builds your icon names
    private ArrayList<String> getIconNames() {
        ArrayList<String> iconNames = new ArrayList<>();
        int numberOfIcons = 99;
        String iconBaseName = "icon";
        for (int i = 1; i < numberOfIcons; i++) {
            iconNames.add(iconBaseName + i);
        }
        return iconNames;
    } 
}

最新更新