【发布时间】:2017-12-02 05:02:21
【问题描述】:
如果我有ListView 和ImageView 以及可以在ImageView 上设置的500 个不同图标,我必须使用什么模式。我应该只写 If/Switch 语句,还是有另一种方法/模式来做?提前致谢!
【问题讨论】:
标签: java android listview design-patterns
如果我有ListView 和ImageView 以及可以在ImageView 上设置的500 个不同图标,我必须使用什么模式。我应该只写 If/Switch 语句,还是有另一种方法/模式来做?提前致谢!
【问题讨论】:
标签: java android listview design-patterns
您要在哪里设置这些图标?您是从服务器获取它们还是将它们本地存储在您的应用程序文件中?还是来自用户手机图库?
这是您想要用于适配器的代码:
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;
}
}
【讨论】:
让我假设您知道要加载到 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)
}
}
【讨论】: