java - 如何使用多个 TextView 在 ListView 中填充多个数据?

标签 java android xml listview android-studio

我是安卓新手。我正在从事一个项目,我有一个问题。我如何从 ArrayList<the_class> 获取数据并将它们填充到 listview ?有一个 xml 文件,其中包含 6 个 TextView ,必须用类项的上下文填充这些 TextView 。谢谢

 <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;
    }


}

在我的主要 Activity 中,我执行以下代码

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);
    }
}

主 Activity 布局 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>

结果:

enter image description here

关于java - 如何使用多个 TextView 在 ListView 中填充多个数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47894563/

相关文章:

java - 使用Java API访问HBase,第一次连接很慢。正常吗?

java - JDBC 从 ArrayList 创建ArrayOf

Android DataBinding "??"符号和来自资源的参数化字符串。如何避免 'null' 文本?

c# - 生成 C# 对象代码并从 xml 文档为其属性赋值

c# - 我无法从类调用我的方法来形成

java - timer.scheduleAtFixedRate 有异常

android - 使用.9.png工具制作渐变png

Android - 通知管理器,有一个没有 Intent 的通知

java - 使用 Transformer 制作的缩进 XML

java - 销毁时获取 Bean