2017-07-05 30 views
0

我想用一个GridView的布局,使网格布局的每一个项目都有自己的ListView。我一直在寻找代码示例,但我还没有找到任何代码。我应该为GridView和ListView使用不同的适配器类吗? 提前谢谢!的ListView里面的GridView

编辑:我已经创建了一个显示所有的一些瓷砖的GridView中,我希望每一个网格项目列入清单,让我增加了一个ListView到GridView项目的布局。不幸的是,我有问题连接到适配器的列表视图。

这是适配器在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; 
}} 

我有一些问题,第二个适配器。

+0

你可以只尝试它,如果它不工作,请咨询详细的问题与你做了什么,一个清楚地说明什么不起作用。是的,您需要为每个列表/网格添加一个适配器。 –

回答

0

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

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

写你需要什么,然后我将更新到我的回答另一种解决方案(如果可能) 好运

0

你只为它创建一个GridView的Android setAdapter。在这个适配器,创建布局。其中有一个listView的xml,然后像往常一样。

PS:如果你使用layout_width =“warp_content”你不会得到嵌套的ListView真正的高度。因为嵌套的ListView无法与“warp_content得到真正的高度

衡量它会被罚款。