我是android的新手。我正在一个项目工作,我有一个问题。我如何从ArrayList<the_class>
获取数据并将它们填充到listview
?有一个xml文件,其中包含6个文本视图,必须使用类项的上下文填充。谢谢
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="10dp">
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:text="origin"
android:textSize="19dp"
android:id="@+id/origin"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:text="destination"
android:textSize="19dp"
android:paddingLeft="15dp"
android:id="@+id/destination"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
* xml文件的一部分。
实际上它非常简单。
我创建了一个模型
public class Model {
String top, bottom;
public Model(String top, String bottom) {
this.top = top;
this.bottom = bottom;
}
public String getTop() {
return top;
}
public void setTop(String top) {
this.top = top;
}
public String getBottom() {
return bottom;
}
public void setBottom(String bottom) {
this.bottom = bottom;
}
}
然后,我需要为它创建一个listview适配器。
public class ListAdapter extends ArrayAdapter<Model> {
private Context activityContext;
private List<Model> list;
public static final String TAG = "ListView";
public ListAdapter(Context context, List<Model> list){
super(context, R.layout.single_listview, list);
this.activityContext = context;
this.list = list;
}
@Override
public View getView(final int position, View view, ViewGroup viewGroup){
final ViewHolder viewHolder;
if (view == null) {
view = LayoutInflater.from(activityContext).inflate(R.layout.single_listview, null);
viewHolder = new ViewHolder();
viewHolder.top = (TextView) view.findViewById(R.id.top);
viewHolder.bottom = (TextView) view.findViewById(R.id.bottom);
viewHolder.top.setText(list.get(position).getTop());
viewHolder.bottom.setText(list.get(position).getBottom());
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
return view;
}
private static class ViewHolder {
TextView top;
TextView bottom;
}
}
在我的主要活动中,我执行以下代码
public class MainActivity extends AppCompatActivity {
ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listview);
List<Model> list = new ArrayList<>();
list.add(new Model("top-one", "bot-one"));
list.add(new Model("top-two", "bot-two"));
list.add(new Model("top-three", "bot-three"));
list.add(new Model("top-four", "bot-four"));
list.add(new Model("top-five", "bot-five"));
list.add(new Model("top-six", "bot-six"));
list.add(new Model("top-seven", "bot-seven"));
list.add(new Model("top-eight", "bot-eight"));
ListAdapter adapter = new ListAdapter(listview.getContext(), list);
listview.setAdapter(adapter);
}
}
在主活动布局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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.fuhnatik.customlistview.MainActivity">
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listview"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</android.support.constraint.ConstraintLayout>
最后,在listview适配器布局xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="6dip"
android:orientation="vertical">
<TextView
android:id="@+id/top"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="TOP SECTION HERE"
android:textSize="16sp" />
<TextView
android:id="@+id/bottom"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="BOTTOM SECTION HERE"
android:textSize="12sp" />
</LinearLayout>
结果: