我想在Android应用中尝试实现的是ListView
显示来自对象的字段。假设我有一个名为Person的对象,其中包含Name,Address,Age等属性。我希望将Person中的每个属性作为ListView
中的一个项目(名称将在第一行,地址将在第二行......)。
如果我不使用数组作为ListView
的来源但是来自对象的属性,我该怎么做呢?我可以在任何地方找到有关ArrayList和ArrayAdapter的教程,但这是我无法使用的。谢谢。
答案 0 :(得分:0)
Listview需要显示数据。数据由适配器提供。适配器需要数据源。无论是ArrayList还是数据库。因此,基本上你可能需要在ArrayList中使用你的对象,然后你可以访问显示的每一行的对象属性。
答案 1 :(得分:0)
对于这个,你需要创建一个适配器和一个加载列表的视图,
例如,创建这样的布局资源文件,
//布局/ single_rsr_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="100dp"
android:background="@drawable/list_item_back">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="4">
<ImageView
android:layout_width="30dp"
android:layout_height="30dp"
android:id="@+id/img_sin_list_image"
android:background="@color/black"
android:layout_marginTop="35dp"
android:layout_gravity="center_horizontal" />
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1.2">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="SomeText SomeText SomeText SomeTextandroid:elliklm;ml;;m;psize="
android:id="@+id/tv_single_list_rsr_description"
android:textColor="@color/black"
android:textSize="15sp"
android:layout_marginTop="20dp"
android:layout_marginRight="45dp"
android:maxEms="11"
android:lines="2"
android:ellipsize="end"
android:layout_marginLeft="20dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="2015/03/13 1:10"
android:id="@+id/tv_sin_list_rsr_date"
android:layout_below="@+id/tv_single_list_rsr_description"
android:layout_marginTop="5dp"
android:textSize="12sp"
android:layout_marginLeft="20dp"
android:textColor="@color/ring_color" />
<TextView
android:layout_width="wrap_content"
android:visibility="gone"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Small Text"
android:id="@+id/tv_sin_list_rsr_id"
android:layout_below="@+id/tv_sin_list_rsr_date"
android:layout_alignLeft="@+id/tv_sin_list_rsr_date"
android:layout_alignStart="@+id/tv_sin_list_rsr_date" />
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
现在创建一个claas来获得你需要的东西,
public class RSRData {
private int id;
private String description;
private String date;
private String imagePath;
public RSRData() {
}
public RSRData(int id, String imagePath, String description, String date) {
this.id = id;
this.imagePath = imagePath;
this.description = description;
this.date = date;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getImagePath() {
return imagePath;
}
public void setImagePath(String imagePath) {
this.imagePath = imagePath;
}
}
然后使用这样的适配器将其转换为这样的重复列表,
public class RSRAdapter extends ArrayAdapter<RSRData> {
Context con;
int res;
public RSRAdapter(Context context,int resource,ArrayList<RSRData> rsrData){
super(context,resource,rsrData);
this.con = context;
this.res = resource;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
RSRData rsrData=getItem(position);
if(convertView==null){
LayoutInflater inflator=LayoutInflater.from(con);
convertView=inflator.inflate(res,parent,false);
}
TextView tvTitle = (TextView)convertView.findViewById(R.id.tv_single_list_rsr_description);
tvTitle.setText(rsrData.getDescription());
TextView tvId = (TextView)convertView.findViewById(R.id.tv_sin_list_rsr_id);
tvId.setText(rsrData.getId());
TextView date = (TextView)convertView.findViewById(R.id.tv_sin_list_rsr_date);
date.setText(rsrData.getDate());
/* ImageVi = (TextView)convertView.findViewById(R.id.tv_primaryKey);
tvPrimaryKey.setText(String.valueOf(promotionData.getId()));*/
return convertView;
}
}
完成后,使用此功能将数据设置到列表视图
ListView list = (ListView)findViewById(R.id.your_list);
ArrayList<RSRAdapter> data = new ArrayList<>(); // use this to get data from database and pass to here,
RSRAdapter adapter = new RSRAdapter(this,R.layout.sigle_promotion_item,data);
list.setAdapter(adapter);