【问题标题】:LayoutAdapter android布局适配器安卓
【发布时间】:2015-01-21 08:53:57
【问题描述】:

让我看看我能否正确解释我的问题... 我要做的事情是:我将要求一个 API 给我一些图像和文本视图,但我不知道它会返回多少。所以问题是,当 API 返回给我时,是否有任何方法可以创建像 ImageView + textView 一样的东西。 我能说的最好的例子是超市提供的应用程序,你不知道你的应用程序会获得多少销售额,所以我想知道是否存在很容易做到这一点。 顺便说一句,我正在使用片段......我看到的例子是在活动中制作的。

我试图解释的例子或多或少是这样的:

谢谢。

【问题讨论】:

  • 进行查询以获得前 10 条记录。在滚动列表视图时,在后台获取下一个 10 条记录并显示它们
  • 这个想法看起来不错,但是您知道任何示例代码来指导我吗?谢谢。
  • 是的,这取决于您使用的 Db。根据该通行证开始索引和限制,您将获得准确的数据量。
  • 请检查我的答案

标签: java android android-studio


【解决方案1】:

您正在寻找的是一个 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>

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

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

【讨论】:

  • 哇!那么如果我想要更多的TextViews或更多的ImageViews,我必须把它放在xml文件和ViewHolder.java上,对吧?
  • 是的,要尝试它,只需将硬编码数据放入您的活动列表中并将其传递给您的适配器。
  • 目前我还没有API,那么当我有它时,我只需要查询所有报价然后显示概述?
  • 确实,您需要做的就是将查询中的数据放在一个列表中并将其传递给您的适配器 :)
  • 非常感谢,我是 Android 新手......我很迷茫,如果我发现代码中有任何错误或不明白的地方,我会告诉你是否你不介意。
【解决方案2】:

在 Fragment 中使用 List Fragment 或 List 并将 Adapter 设置为 Listview,它返回的大小将是您的数据大小

供参考:

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      1) 如果你不想打 Db

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

      2) fire 查询获取前 30 个项目,显示列表 然后在滚动触发查询中再获取 30 个项目并调用 notifydatasetchanged

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多