试图自学如何做这些事情。我正在尝试弄清楚如何将图像动态添加到 ListView 项。我正在做的是提取返回以下内容的 JSON 数据:
{"mdslist":
[
{
"UID":"3",
"name":"Stamford, CT",
"date":"March 10, 2018",
"icon":"badge_stamford"
},
{
"UID":"4",
"name":"Enschede, The Netherlands",
"date":"March 11, 2018",
"icon":"badge_enschede"
}
]
}
然后处理该数据并将其转储到 ListView 中。ListView 具有单独的容器来保存数据 - 请注意 ImageView 标记中的临时 img:
md_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/md_item_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="false"
android:minHeight="65dp">
<ImageView
android:id="@+id/md_icon"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginBottom="4dp"
android:layout_marginTop="4dp"
android:contentDescription="@string/md_logo"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/badge_stamford" />
<TextView
android:id="@+id/md_name"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="4dp"
android:paddingBottom="2dip"
android:paddingTop="6dip"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/md_icon"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/md_date"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_marginBottom="4dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:paddingBottom="2dip"
android:textColor="@color/dark_gray"
android:textSize="14sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/md_icon"
app:layout_constraintTop_toBottomOf="@+id/md_name" />
</android.support.constraint.ConstraintLayout>
JSON 数据在处理后的 onPostExecute(( 调用期间注入:
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (pd.isShowing()) {
pd.dismiss();
}
/**
* Dump parsed JSON data into ListView
**/
ListAdapter adapter = new SimpleAdapter(
md_list_all.this, mdList,
R.layout.md_list_item, new String[]{"name", "date"}, new int[]{R.id.md_name, R.id.md_date});
lv.setAdapter(adapter);
}
如您所见,我没有添加图标数据的功能。这些文件被命名为 JSON 数据,扩展名为.jpg。我想要的是获取JSON"图标"信息,并将其注入ImageView。
正如Rizwan在评论中所说,您可能希望使用URL从服务器加载图像。
要回答问题的另一部分,您需要创建自定义ListAdapter,SimpleAdapter不会给您太大的灵活性。
下面我拿了一些我过去做过的代码,并试图让它足够容易理解,如果你对它有任何疑问,请告诉我?
class AdvancedAdapter extends BaseAdapter {
private Context mContext;
private LayoutInflater mLayoutInflater;
private ArrayList<CustomData> mItems;
AdvancedAdapter(Context context, ArrayList<CustomData> items) {
mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mContext = context;
mItems = items;
}
@Override
public int getCount() {
return mItems.size();
}
@Override
public Object getItem(int i) {
return mItems.get(i);
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
final LayoutInflater layoutInflater = LayoutInflater.from(mContext);
convertView = layoutInflater.inflate(R.layout.layout_for_list_item, null);
}
TextView titleView = (TextView) convertView.findViewById(R.id.title);
final ImageView imageView = (ImageView) convertView.findViewById(R.id.image);
titleView.setText(mItems.get(position).name());
imageView.setImageResource(0); //Nulls out the image while loading
......
...... Load image from URL
imageView.setImageBitmap((Bitmap) finalImage);
.....
return convertView;
}
}