Пытаюсь вывести иконки для пунктов меню, но не совсем знаю как правильно это сделать. Приложение делает следующее: Есть файл 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));
Не знаю как правильно подсунуть иконку
Поле int image
класса Radio
является идентификатором ресурса (в данном случае изображения).
Вам требуется по имени ресурса получить его идентификатор. Делается это следующим образом:
Resources resources = context.getResources();
int resId = resources.getIdentifier(name, "drawable", context.getPackageName());
, где:
context
– ссылка на активити или на любой другой объект, в иерархии наследования которого имеется класс Context
.name
– название ресурса.Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как в этом классе переопределить setValueAt(), относящийся к TableModel?
Получаю ответ ввиде json, но не могу понять как его записать в Realm
В настоящий момент я работаю серверным Java разработчиком на нескольких небольших и не самых важных для компании проектахНа них я серверный...