布局适配器 android

LayoutAdapter android

让我看看我能否正确解释我的问题... 我会做的事情是:我要请 API 给我一些图像和 TextView,但我不知道它会提供多少 returns。所以问题是,是否有任何方法可以创建一些东西来创建 ImageView + textView 作为 API returns 给我。 我能说的最好的例子是来自超市报价的应用程序,你不知道你的应用程序会获得多少销售额,所以我想知道是否存在可以轻松做到这一点的方法。 顺便说一下,我正在使用片段...我看到的示例是在 Activities 上制作的。

大致上我要解释的例子是这样的:

谢谢。

使用 List Fragment 或 List inside Fragment 并将 Adapter 设置为 Listview,returns 大小将是数据的大小

供参考:

列表片段:http://developer.android.com/reference/android/app/ListFragment.html

带有图像和文本的列表视图:http://www.androidhive.info/2012/02/android-custom-listview-with-image-and-text/

您正在寻找的是 Listview 适配器

public class ExampleAdapter extends BaseAdapter {
    List<Product> products;
    private Activity context;

    @Override
    public int getCount() {
        return products.size();
    }

    public ExampleAdapter(List<Product> products, Activity context) {
        this.products = products;
        this.context = context;
    }

    @Override
    public Object getItem(int position) {
        return products.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final Product product = products.get(position);

        ViewHolder holder;

        if (convertView == null) {
            LayoutInflater inflater = context.getLayoutInflater();
            convertView = inflater.inflate(R.layout.row_shopping_item, null);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.getProductTextView().setText(product.getName());
        holder.getProductImageView().setText(product.getPicture());

        return convertView;
    }

    private class ViewHolder {
        private final TextView productTextView;
        private final ImageView productImageView;

        private ViewHolder(View wrapperView) {
            productTextView = (TextView) wrapperView.findViewById(R.id.tvName);
            productImageView = (TextView) wrapperView.findViewById(R.id.ivPicture);

        }

        public TextView getProductTextView() {
            return productTextView;
        }

        public TextView getProductImageView() {
            return productImageView;
        }

    }
}

此适配器需要一个布局来定义行的外观。这将是这样的

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView
        android:layout_gravity="center_vertical"
        android:layout_width="50dp"
        android:id="@+id/ivPicture"
        android:layout_height="50dp" />

    <TextView
        android:id="@+id/tvName"
        android:text="Product 1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

最后,在您要显示概览的 activity 中,您需要使用列表视图并设置适配器

final ExampleAdapter adapter = new ExampleAdapter(list, this);
listview.setAdapter(adapter);

android 中的每个 ListView 都使用一个适配器。适配器为列表视图提供应在列表视图中显示的视图。

适配器使用 ArrayList 等数据源来存储应该用于生成这些视图的数据。现在,ArrayList 没有固定大小,因此当您从 API 获取新数据并通知适配器时,您可以 add/remove/modify ArrayList 中的项目。适配器将相应地重绘其视图。

MrJM 提供的答案给出了如何编写适配器的示例。

1) 如果你不想打 Db

  • 然后将您的结果添加到列表中,取前 30 项并显示列表。
  • 然后在列表视图滚动时获取下 30 个项目并调用 notifydatasetchanged

2) 触发查询获取前 30 项,显示列表 然后在 scroll fire query 上获取另外 30 个项目并调用 notifydatasetchanged

在这种情况下,只需检查来自 Db 的项目是否不为空。