Не могу вывести иконку в пункт списка

288
05 января 2017, 05:43

Пытаюсь вывести иконки для пунктов меню, но не совсем знаю как правильно это сделать. Приложение делает следующее: Есть файл json с объектами. Каждый объект состоит из трех полей title, url, icon. Через кастомный адаптер нужно вывести данные в ListView. иконки находятся в папке drawable.

Вот код класса Radio

    public class Radio {
    String title;
    String subTitle;
    int image;
    Radio(String title, String subTitle , int image) {
        this.title = title;
        this.subTitle = subTitle;
        this.image = image;
    }
}

Вот код класса RadioAdapter

public class RadioAdapter extends BaseAdapter {
    Context ctx;
    LayoutInflater lInflater;
    ArrayList<Radio> objects;
    RadioAdapter(Context context, ArrayList<Radio> products) {
        ctx = context;
        objects = products;
        lInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() {
        return objects.size();
    }
    @Override
    public Object getItem(int position) {
        return objects.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            view = lInflater.inflate(R.layout.item, parent, false);
        }
        Radio p = getRadio(position);
        ((TextView) view.findViewById(R.id.tvDescr)).setText(p.title);
        ((TextView) view.findViewById(R.id.tvPrice)).setText(p.subTitle + "");
        ((ImageView) view.findViewById(R.id.image)).setImageResource(p.image);
        return view;
    }
    Radio getRadio(int position) {
        return ((Radio) getItem(position));
    }
}

Код MainActivity

public class MainActivity extends AppCompatActivity {
    ArrayList<Radio> products = new ArrayList<>();
    RadioAdapter boxAdapter;
    ListView lvMain;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new ParseTask().execute();
        boxAdapter = new RadioAdapter(MainActivity.this, products);
        lvMain = (ListView) findViewById(R.id.list);
        lvMain.setAdapter(boxAdapter);
    }
    @Override
    protected void onResume() {
        super.onResume();
    }
    private class ParseTask extends AsyncTask<Void, Void, String> {
        BufferedReader reader = null;
        String resultJson = "";
        @Override
        protected String doInBackground(Void... params) {
            try {
                InputStream inputStream = getAssets().open("radios.json");
                StringBuffer buffer = new StringBuffer();
                reader = new BufferedReader(new InputStreamReader(inputStream));
                String line;
                while ((line = reader.readLine()) != null) {
                    buffer.append(line);
                }
                resultJson = buffer.toString();
            }catch (Exception e) {
                e.printStackTrace();
            }
            return resultJson;
        }
        @Override
        protected void onPostExecute(String strJson) {
            super.onPostExecute(strJson);
            JSONObject dataJsonObj = null;
            try {
                dataJsonObj = new JSONObject(strJson);
                JSONArray radioArray = dataJsonObj.getJSONArray("radio");
                for (int i = 0; i < radioArray.length(); i++) {
                    JSONObject radioObject = radioArray.getJSONObject(i);
                    String radioTitle = radioObject.optString("title");
                    String radioUrl = radioObject.optString("url");
                    String radioIcon = radioObject.optString("icon");
                    String img = "R.drawable." + radioIcon;
                    int im = Integer.parseInt(img);
                    products.add(new Radio(radioTitle, radioUrl, im));
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
}

Содержимое Json

{
  "radio": [
    {
      "title": "Первое",
      "url": "http://site.ru/1.mp3",
      "icon": "img1.png"
    },
    {
      "title": "Второе",
      "url": "http://site.ru/2.mp3",
      "icon": "img2.png"
    },
    {
      "title": "Третье",
      "url": "http://site.ru/3.mp3",
      "icon": "img3.png"
    }
  ]
}

Застрял тут

String img = "R.drawable." + radioIcon;
int im = Integer.parseInt(img);
products.add(new Radio(radioTitle, radioUrl, im));

Не знаю как правильно подсунуть иконку

Answer 1

Поле int image класса Radio является идентификатором ресурса (в данном случае изображения).

Вам требуется по имени ресурса получить его идентификатор. Делается это следующим образом:

Resources resources = context.getResources();
int resId = resources.getIdentifier(name, "drawable", context.getPackageName());

, где:

  • context – ссылка на активити или на любой другой объект, в иерархии наследования которого имеется класс Context.
  • name – название ресурса.
READ ALSO
Переопределение setValueAt

Переопределение setValueAt

Как в этом классе переопределить setValueAt(), относящийся к TableModel?

410
Как JSON записать в БД Realm

Как JSON записать в БД Realm

Получаю ответ ввиде json, но не могу понять как его записать в Realm

340
Как передать данные из PendingIntent

Как передать данные из PendingIntent

У меня есть код в сервисе:

343
Взять задач на работе или изучать технологии самостоятельно? [требует правки]

Взять задач на работе или изучать технологии самостоятельно? [требует правки]

В настоящий момент я работаю серверным Java разработчиком на нескольких небольших и не самых важных для компании проектахНа них я серверный...

295