【问题标题】:Android Icon/Image setting pattern for multiple choicesAndroid Icon/Image 多选设置模式
【发布时间】:2017-12-02 05:02:21
【问题描述】:

如果我有ListViewImageView 以及可以在ImageView 上设置的500 个不同图标,我必须使用什么模式。我应该只写 If/Switch 语句,还是有另一种方法/模式来做?提前致谢!

【问题讨论】:

    标签: java android listview design-patterns


    【解决方案1】:

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

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

    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;
        } 
    
    }
    

    【讨论】:

    • 它们本地存储在可绘制文件夹中,我使用的是firebase auth,所以也许我应该将它们存储在firebase 存储中? :/ 因为它是一个小图标,所以它们真的不占用太多空间.. :/
    • 不,您不需要将它们存储在 firebase 上。您可以使用这样的名称保存它们,例如:icon1.png、icon2.png 和... icon90.png!然后你的java代码你可以遍历这些名字。我会在这里为您发布代码
    • @VaclovasRekašiusJr.我为你编辑了我的答案。如果您有任何答案,请告诉我。
    • 两个答案似乎都是正确的,但由于某种原因,其他答案得到了更多的支持,所以我必须将其标记为正确。谢谢,真的很感激! ;)
    【解决方案2】:

    让我假设您知道要加载到 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)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      • 2014-08-22
      相关资源
      最近更新 更多