Android Studio,如何使用数组或游标中的数据填充自定义ListView?

时间:2015-09-27 03:21:26

标签: android listview android-listview textview android-arrayadapter

所以我有一个片段视图,如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
tools:context=".MainActivityFragment"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true">

    //Various elements

    <ListView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/notes_list_view"
        android:drawSelectorOnTop="false">

    </ListView>

</LinearLayout>

因此列表视图位于一组元素的底部。我一直在试图弄清楚如何在这个列表视图中填充项目,但无论我尝试什么,我都无法在数组中出现任何内容,每次都是空的。理想情况下,我想填写一个如下所示的项目视图:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="horizontal">

<FrameLayout
    android:layout_width="60dp"
    android:layout_height="wrap_content">

    <ImageView
        android:id="@+id/list_item_icon"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</FrameLayout>

<LinearLayout
    android:layout_height="wrap_content"
    android:layout_width="0dp"
    android:layout_weight="7"
    android:orientation="vertical">

    <TextView
        android:id="@+id/list_item_1_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="sans-serif-condensed"
        android:textSize="20sp"/>

    <TextView
        android:id="@+id/list_item_2_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="sans-serif-condensed"
        android:textAppearance="?android:textAppearanceSmall"/>
</LinearLayout>

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="5"
    android:layout_gravity="center"
    android:orientation="vertical">

    <TextView
        android:id="@+id/list_item_3_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:fontFamily="sans-serif-condensed"
        android:textAppearance="?android:textAppearanceLarge"/>

    <TextView
        android:id="@+id/list_item_4_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:fontFamily="sans-serif-condensed"
        android:textAppearance="?android:textAppearanceSmall"/>
</LinearLayout>
</LinearLayout>

有人可以帮我编写一个ArrayAdapter或CursorAdapter来显示某些东西,我可以稍后调整它,我计划这样做,因为数据最终会来自数据库。

或者,有人可以找到什么原因导致无法显示,我在UI设计方面没有经验,我担心我只是阻碍了列表视图的空间。

作为参考,我使用的是11的最小SDK。

1 个答案:

答案 0 :(得分:1)

声明数据传输类以存储填充

所需的值
public class Item
{
 public string text1,text2,text3,text4;
 public byte[] image;
}

将Db中的值设置为ArrayList的{​​{1}},然后在Adpater中使用Item将视图填入

DataDto
中,填写ArrayList并将其传递给适配器,如

    public class ListAdapter extends ArrayAdapter<Item> {

     ArrayList<Item> p;
        public ListAdapter(Context ArrayList<Item> items) {
            super(context, R.layout.list_item, items);
            p=items;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            View v = convertView;

            if (v == null) {
                LayoutInflater vi;
                vi = LayoutInflater.from(getContext());
                v = vi.inflate(R.layout.list_item, null);
            }



            if (p != null) {
                TextView tt1 = (TextView) v.findViewById(R.id.list_item_1_textview);
                TextView tt2 = (TextView) v.findViewById(R.id.list_item_2_textview);
                TextView tt3 = (TextView) v.findViewById(R.id.list_item_3_textview);
                TextView tt4 = (TextView) v.findViewById(R.id.list_item_4_textview);
                ImageView img=(ImageView)
v.findViewById(R.id.list_item_icon);
                if (tt1 != null) {
                    tt1.setText(p.get(position).text1);
                }

                if (tt2 != null) {
                    tt2.setText(p.get(position).text4);
                }

                if (tt3 != null) {
                    tt3.setText(p.get(position).text3);
                }
                if (tt4 != null) {
                    tt1.setText(p.get(position).text4);
                }
               if(img!=null)
               {
                byte[] bitmapdata =p.get(position).image;
                Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapdata , 0, bitmapdata .length);
                  img.setimageBitmap(bitmap);
               }

            }

            return v;
        }

    }