Android Studio,如何使用数组或游标中的数据填充自定义 ListView?
Android Studio, How can I fill a custom ListView with data from an array or cursor?
所以我有一个看起来像这样的片段视图:
<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 设计方面没有经验,我担心我只是 space 的列表视图被阻塞了。
作为参考,我使用的最小 SDK 为 11。
声明数据传输Class以存储填充所需的值
public class Item
{
public string text1,text2,text3,text4;
public byte[] image;
}
将 Db 中的值设置为 Item
的 ArrayList
,然后在 Adpater 中使用 DataDto
填充视图,如
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;
}
}
在您的 Activity 中,填充 ArrayList 并将其传递给 Adapter,如
ListView lv=(ListView)findViewById(R.id.notes_list_view);
ArrayList<Item> items; populate this list from DB
ListAdpater data=new ListAdapter(this,items);
lv.setAdapter(data);
所以我有一个看起来像这样的片段视图:
<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 设计方面没有经验,我担心我只是 space 的列表视图被阻塞了。
作为参考,我使用的最小 SDK 为 11。
声明数据传输Class以存储填充所需的值
public class Item
{
public string text1,text2,text3,text4;
public byte[] image;
}
将 Db 中的值设置为 Item
的 ArrayList
,然后在 Adpater 中使用 DataDto
填充视图,如
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;
}
}
在您的 Activity 中,填充 ArrayList 并将其传递给 Adapter,如
ListView lv=(ListView)findViewById(R.id.notes_list_view);
ArrayList<Item> items; populate this list from DB
ListAdpater data=new ListAdapter(this,items);
lv.setAdapter(data);