[英]Implement a custom ListView in Android
我在MainActivity中创建了一个listView,并为行布局创建了另一个布局文件,如下所示:
问题是,我该如何实现它? 我在哪里设置所有必须在文本中的字符串? 哪些是注意到的 ?
我看过互联网,但我找到了一个像我一样有类似listView的人。
我知道对于Strings我可以使用数组,但是我也可以设置一个ImageViews数组吗?
我真的很感激,如果你能给我一个详细的答案,你可以解释我如何“把东西”放在我的listView中
编辑:添加了row.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="wrap_content">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text"
android:textAllCaps="true"
android:textSize="36sp"
android:layout_marginTop="10dp"
android:fontFamily="sans-serif-condensed"
android:textStyle="bold"
android:textColor="@color/black" />
<TextView
android:id="@+id/note"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/text"
android:text="note note note"
android:layout_marginTop="2dp"
android:fontFamily="sans_serif_medium"
android:textSize="24sp"/>
<ImageView
android:layout_width="200dp"
android:layout_height="140dp"
android:scaleType="fitCenter"
android:layout_alignParentEnd="true"/>
</RelativeLayout>
你应该创造
DataModel.java
,你可以给出你希望的任何名字)代表你的数据: String text, note, image url;
以及getter和setter方法。 ArrayAdapter
的类。 重写getView()
方法。 将ArrayList< DataModel >
传递给创建的自定义数组适配器。 创建一个构造函数并调用super来调用ArrayAdapter的构造函数“: ArrayAdapter(Context context, int resource, List<T> objects)
。 在getView方法中膨胀行布局并设置数据[匹配Arraylist中的索引和getView方法的position参数]
在您的问题的上下文中,我建议您更多地了解view holder pattern
和RecyclerView
,它将帮助您了解事物的工作方式以及如何有效地完成工作。
你想要做的是创建一个自定义类,并让它扩展ArrayAdapter或BaseAdapter。 在它的构造函数中,您可以为文本和图像传递一个String数组。 在getView方法中,膨胀自定义行:
LayoutInflater layoutInflater = LayoutInflater.from(context);
View yourView = layoutInflater.inflate(R.layout.added_row, parent, false);
然后,您可以使用传递给设置值的数组设置行的值:
TextView text = (TextView) yourView.findViewById(R.id.text);
text.setText(text[position]);
使用自定义适配器方法在自定义列表视图中加载数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.