【问题标题】:how to populate multiple data in a listview with more than one textview?如何用多个文本视图填充列表视图中的多个数据?
【发布时间】:2018-06-02 08:04:39
【问题描述】:

我是安卓新手。我正在一个项目中工作,我有一个问题。如何从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 文件的一部分。

【问题讨论】:

  • 你试过什么?什么?
  • 我使用了一个列表适配器。它有效,但它真的很慢。我想知道是否有另一种更快的方法。

标签: java android xml listview android-studio


【解决方案1】:

其实很简单。

我创建了一个模型

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

然后,我需要为它创建一个列表视图适配器。

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>

结果:

【讨论】:

  • 哇……这真的很有帮助。非常感谢!
  • 你明白了。快乐编码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
  • 1970-01-01
  • 1970-01-01
  • 2012-01-13
  • 2013-06-04
  • 1970-01-01
  • 2012-02-22
相关资源
最近更新 更多