【问题标题】:ListView inside GridviewGridview 内的 ListView
【发布时间】: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


【解决方案1】:

答案是肯定的。 还有另一种解决方案。

  • 添加相对/线性布局作为 GridView 的项目。
  • 在 GridView 的适配器类中,在 @getView() 中添加子项 动态的。 但我不推荐它,因为性能。加载这种类型的视图需要很长时间。

写下你需要什么,然后我会更新我的答案以获得另一个解决方案(如果可能的话) 祝你好运

【讨论】:

    【解决方案2】:

    您只需为其创建一个 GridView android setAdapter。在此适配器中,创建一个包含 listView 的 layout.xml。然后照常进行。

    ps:如果你使用 layout_width="warp_content",你不会得到嵌套 listView 的真实高度。因为嵌套的 listView 无法使用“warp_content

    获得真正的高度

    量一下就好了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-02
      • 2016-10-17
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      相关资源
      最近更新 更多