MergeAdapter与Gridview

时间:2013-08-12 22:20:59

标签: android gridview commonsware-cwac

库:

我想用MergeAdapter添加gridview适配器。

第一种方式,如果设置适配器:

plv = (PullToRefreshListView) LayoutInflater.from(context).inflate(
                    R.layout.layout_listview_in_viewpager, container, false);
adapter = new MergeAdapter();
sadapter = new StaggeredAdapter(BaseSampleActivity.this, R.id.imageView1, urls);
adapter.addAdapter(sadapter);
plv.setAdapter(adapter);

然后它就像列表视图一样工作。

第二种方式,如果您构建视图:

plv = (PullToRefreshListView) LayoutInflater.from(context).inflate(
                    R.layout.layout_listview_in_viewpager, container, false);
adapter = new MergeAdapter();
adapter.addView(buildlabel3(context));
plv.setAdapter(adapter);

public View buildlabel3(Context context) {
        // TODO Auto-generated method stub

        RelativeLayout v = (RelativeLayout)LayoutInflater.from(context).inflate(R.layout.activity_main, null);
        StaggeredGridView gridView = (StaggeredGridView) v.findViewById(R.id.staggeredGridView1);

        int margin = getResources().getDimensionPixelSize(R.dimen.margin);

        gridView.setItemMargin(margin); // set the GridView margin
        gridView.setPadding(margin, 0, margin, 0); // have the margin on the sides as well 

        StaggeredAdapter sadapter = new StaggeredAdapter(BaseSampleActivity.this, R.id.imageView1, urls);

        gridView.setAdapter(sadapter);
        sadapter.notifyDataSetChanged();
        Log.e("view", v.toString());
        return v;
    }

然后它没有显示任何内容且没有错误。

2 个答案:

答案 0 :(得分:0)

addView()上的

MergeAdapter专为ListView标题等设计。相反,您试图将GridView作为元素放在使用AdapterView的其他MergeAdapter内。 MergeAdapter不支持,GridViewAdapterView置于另一个Adapter内,无论您如何尝试,都不太可能。{/ p>

此外,我不建议将static设为MergeAdapter,而当然不是{{1}},因为它会代表显着的内存泄漏(以及首先是没有必要的。)

答案 1 :(得分:0)

你的问题很通用。与您的代码一样

private static MergeAdapter adapter = null;
adapter.addView(buildlabel3(context));

适配器为null,未初始化。所以无论你添加什么,它仍然是空的。

我见过MergeAdapter的soucre代码。它有一个构造函数:

public MergeAdapter() {
    super();
}

所以只需将代码更改为

即可
private static MergeAdapter adapter = new MergeAdapter();
adapter.addView(buildlabel3(context));

然后再试一次。