【发布时间】:2017-07-05 16:35:27
【问题描述】:
我想使用 GridView 布局,这样 Gridlayout 的每个项目都有自己的 ListView。我一直在寻找代码示例,但没有找到。我应该为 GridView 和 ListView 使用不同的适配器类吗? 提前谢谢!
编辑:我创建了一个 GridView 来显示所有一些图块,并且我希望每个网格项都包含一个列表,因此我在 GridView 项的布局中添加了一个 ListView。不幸的是,我在将列表视图连接到适配器时遇到问题。
这是gridView的适配器:
public class MainViewAdapter extends ArrayAdapter<Category> {
private Context mContext;
private int layoutResourceId;
private ArrayList<Category> mGridData = new ArrayList<Category>();
ArrayAdapter adapter;
public MainViewAdapter(Context mContext, int layoutResourceId, ArrayList<Category> mGridData) {
super(mContext, layoutResourceId, mGridData);
this.layoutResourceId = layoutResourceId;
this.mContext = mContext;
this.mGridData = mGridData;
}
public void setGridData(ArrayList<Category> mGridData) {
this.mGridData = mGridData;
notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder;
String imageUrl;
if (row == null) {
LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.SubListView = (ListView) row.findViewById(R.id.SubList);
holder.titleTextView = (TextView) row.findViewById(R.id.category_title);
holder.simpleDraweeView = (SimpleDraweeView) row.findViewById(R.id.category_image);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
Category category = mGridData.get(position);
Log.i("position", "" + position);
holder.titleTextView.setText(Html.fromHtml(category.getTitle()));
imageUrl = category.getImage();
Log.i("image url",imageUrl );
Uri imageUri = Uri.parse(imageUrl);
holder.simpleDraweeView.setImageURI(imageUri);
List SubCategories = category.getSubCateg();
Log.i("@MainViewAdapter - SubCategories", category.getSubCateg().toString());
//list SubCategories to ArrayList
ArrayList<SubCategory> listOfSub = new ArrayList<>(SubCategories.size());
listOfSub.addAll(SubCategories);
Log.i("listOfSub",listOfSub.toString());
//ArrayList to ListView
holder.SubListView.setAdapter(adapter);
return row;
}
static class ViewHolder {
TextView titleTextView;
SimpleDraweeView simpleDraweeView;
ListView SubListView;
}}
这是列表视图的适配器:
public class SubListAdapter extends ArrayAdapter<SubCategory> {
private int layoutResourceId;
private ArrayList<SubCategory> mSubGridData = new ArrayList<SubCategory>();
ArrayAdapter adapter;
private final Context mContext;
public SubListAdapter(Context mContext, int layoutResourceId, ArrayList<SubCategory> mSubGridData) {
super(mContext, R.layout.subcategory_item, mSubGridData);
this.layoutResourceId = layoutResourceId;
this.mContext = mContext;
this.mSubGridData = mSubGridData;
}
public void setSubGridData(ArrayList<SubCategory> mSubGridData) {
this.mSubGridData = mSubGridData;
notifyDataSetChanged();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
SubListAdapter.ViewHolder holder;
String imageUrl;
if (row == null) {
LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.SubTitleTextView = (TextView) row.findViewById(R.id.subCatItemTitle);
row.setTag(holder);
} else {
holder = (SubListAdapter.ViewHolder) row.getTag();
return rowView;
}
static class ViewHolder {
TextView SubTitleTextView;
ListView SubListView;
}}
我在使用第二个适配器时遇到了一些问题。
【问题讨论】:
-
你可以尝试一下,如果它不起作用,请详细询问你做了什么,并清楚地描述什么不起作用。是的,每个列表/网格都需要一个适配器。
标签: android listview gridview android-adapter