Android:如何将drawable转换为int?

问题描述 投票:0回答:3

我使用此代码获取了一些已安装应用程序的图标:

Drawable icon = getPackageManager().getApplicationIcon("com.example.example");
imageView.setImageDrawable(icon);

然后我想将此图像添加到由 res 中的某些图像形成的网格视图中。我不想更改与我的 gridview 一起使用的适配器。我为每个项目使用保存在两个 Arraylist 中的图标和图像。

ArrayList<String> listCountry = new ArrayList<String>();
 ArrayList<Integer> listFlag = new ArrayList<Integer>(); 

我将元素添加到我的 listFlag 中,如下所示:

listFlag.add(R.drawable.ppt);

那么如何将 Drawble 转换为 int 以将其添加到

listFlag
?我的用于查看 gridview 项目的适配器由以下代码给出:

public  class GridviewAdapter extends BaseAdapter
{
    private ArrayList<String> listCountry = new ArrayList<String>();
    private ArrayList<Integer> listFlag = new ArrayList<Integer>();
    private Activity activity;
    private Context context;


    public GridviewAdapter( ) {
         super();
              }

    public GridviewAdapter(Activity activity, ArrayList<String> listC, ArrayList<Integer> listF) {
        super();
        this.listCountry.clear();
        this.listFlag.clear();
        //this.notifyDataSetChanged();
        this.listCountry.addAll(listC);
        this.listFlag.addAll(listF);
        this.activity = activity;
        this.context = activity.getApplicationContext();
      this.notifyDataSetChanged();}

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return listCountry.size();
    }

    @Override
    public String getItem(int position) {
        // TODO Auto-generated method stub
        return listCountry.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    public static class ViewHolder
    {
        public ImageView imgViewFlag;
        public TextView txtViewTitle;
        public TextView txtViewDescription;
    }

    public void setFile(ArrayList<String> listC, ArrayList<Integer> listF) {
        listFlag.clear();
        listCountry.clear();
         listCountry.addAll(listC);
        listFlag.addAll(listF);
        notifyDataSetChanged();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder view;
        LayoutInflater inflator = activity.getLayoutInflater();

        if(convertView==null)
        {
            view = new ViewHolder();
            convertView = inflator.inflate(R.layout.gridview_row, null);

            view.txtViewTitle = (TextView) convertView.findViewById(R.id.textView1);
            view.imgViewFlag = (ImageView) convertView.findViewById(R.id.imageView1);
            view.txtViewDescription = (TextView) convertView.findViewById(R.id.textView2);

            convertView.setTag(view);

            convertView.setLayoutParams(new GridView.LayoutParams((int) context.getResources().getDimension(R.dimen.r_width), (int) context.getResources().getDimension(R.dimen.r_height)));
        }
        else
        {
            view = (ViewHolder) convertView.getTag();
        }

        view.txtViewTitle.setText(listCountry.get(position));
        view.txtViewTitle.setSelected(true);
        view.txtViewDescription.setText(SessionChoose.DESCRIPTION.get(position));
         view.txtViewDescription.setSelected(true);
        view.imgViewFlag.setImageResource(listFlag.get(position));


        return convertView;
    }
}
android android-drawable
3个回答
0
投票

没有办法做到这一点...要解决您的问题,您应该使用

ArrayList<Drawable> listFlag


0
投票

使用 getId()

listFlag.add(imageView.getId());

0
投票

您可以首先使用以下方法设置 id:

imageView.setId(1);

然后添加到listFlag:

listFlag.add(imageView.getId());
© www.soinside.com 2019 - 2024. All rights reserved.