【发布时间】:2014-07-26 08:39:38
【问题描述】:
我在传播我在 ListView 上收到的数据时遇到了困难
假设我收到一个列表: list(String category, String name, String details, String isSection) 我有
list.add("Drink", "Water", "Fresh Water", false)
list.add("Drink", "Cola", "8oZ", false)
list.add("Food", "Burger", "Homemade", false)
等等……
现在,当我调用适配器时,会调用 GetView 方法。我将其实现为:
public class EntryRestaurantAdapter extends ArrayAdapter<RestaurantMenu> {
private Context context;
private ArrayList<RestaurantMenu> items;
private LayoutInflater vi;
private static final int TYPE_SECTION = 1;
private static final int TYPE_ITEM = 2;
public EntryRestaurantAdapter(Context context,ArrayList<RestaurantMenu> items) {
super(context,0, items);
this.context = context;
this.items = items;
vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getViewTypeCount () {
return 2;
}
@Override
public int getItemViewType(int position) {
return items.get(position).getSection() ? TYPE_SECTION : TYPE_ITEM;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
final RestaurantMenu i = items.get(position);
if (!i.getSection()){
RestaurantMenu si = (RestaurantMenu)i;
v = vi.inflate(R.layout.list_item_section, null);
v.setOnClickListener(null);
v.setOnLongClickListener(null);
v.setLongClickable(false);
final TextView sectionView = (TextView) v.findViewById(R.id.list_item_section_text);
sectionView.setText(si.getCategory());
for (int a=0; a<items.size(); a++){
// if (items.indexOf(i.getCategory()) == items.lastIndexOf(i.getCategory()))
// v = vi.inflate(R.layout.item_view, null);
if (i.getCategory().equals(items.get(a).getCategory())){
Log.d("Dentro del FOr ",""+ items.get(a).getSection());
items.get(a).setSection(true);
Log.d("Dentro del FOr despues del true ",""+ items.get(a).getSection());
}
}
}
else {
v = vi.inflate(R.layout.item_view, null);
TextView sectionView = (TextView) v.findViewById(R.id.restaurant_name);
RestaurantMenu si = (RestaurantMenu) i;
sectionView.setText(si.getFoodName());
}
Log.d("Entry Section: ", "" + i.getSection() + " ID: " + i.getCategory());
return v;
}
我将我的主要活动称为:
EntryRestaurantAdapter adapter = new EntryRestaurantAdapter(this, restaurantMenuList);
listview.setAdapter(adapter);
这可行,但它省略了每个类别的第一个。我认为这是因为 getView 方法显然对每个位置运行一次。这导致它在第一次尝试每个类别时将 v 作为类别而不是作为项目返回。我该如何解决这个问题?
这是输出
类别:饮料 项目可乐(它省略了水的项目视图) 类别:食物(它省略了汉堡的项目视图)
【问题讨论】:
-
你能发布整个适配器,以及你定义列表和适配器的方法吗??
-
当然可以。我将编辑帖子。
-
您在列表中总共获得了多少行?总的来说,我的意思是项目+部分
-
这真的取决于我拉的数据。现在大约有 4 行,每行有(类别、名称、详细信息、isSection)
标签: android listview android-listview