Ошибка синтаксического анализа — Android java

#java #android #parsing #gridview

#java #Android #синтаксический анализ #просмотр сетки

Вопрос:

Я пытаюсь динамически заполнить gridview значками. Я следовал руководству по gridview hello. Однако массив с изображениями не всегда точно такой же. В зависимости от предыдущего действия выдается другое image array (извлеченное из ответа soap), которое состоит из названий значков, например agenda => повестка дня.png. Я хотел создать массив, выполнив цикл по массиву и добавив его с помощью R.drawable icon_name . Однако R.drawable не удается выполнить синтаксический анализ до запрошенного массива целых чисел.

 public class ImageAdapter extends BaseAdapter 
{
    private Context mContext;
    final ArrayList<String> image = getIntent().getStringArrayListExtra("image");

    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return icoontjes.size();
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    public ArrayList<Integer> icoontjes;
    {
        for (int i=0; i<image.size(); i  ){
            Integer icon= Integer.valueOf("R.drawable." image.get(i));
            icoontjes.add(icon);
        }
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(icoontjes.get(position));
        return imageView;
    }
}
  

Ответ №1:

Вы можете использовать

 for (int i=0; i < image.size(); i  ) {
    Integer icon = getResources().getIdentifier(image.get(i), "drawable", "your.package");
    icoontjes.add(icon);
}
  

где your.package находится базовый пакет вашего приложения для Android (пакет, в котором вы static final R class определили.

Таким образом, icon переменная будет содержать идентификатор вашего чертежа на основе вашего image.get(i) .

Ответ №2:

я могу дать вам ответ, но вы не должны (действительно не должны) этого делать…

вместо

 Integer icon= Integer.valueOf("R.drawable." image.get(i));
  

попробуйте

 R.class.getField("R.drawable." image.get(i)).getInt(null)