布局适配器 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 的项目是否不为空。
让我看看我能否正确解释我的问题... 我会做的事情是:我要请 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 的项目是否不为空。