Android 将适配器与Gridview合并

Android 将适配器与Gridview合并,android,gridview,commonsware-cwac,Android,Gridview,Commonsware Cwac,库: plv = (PullToRefreshListView) LayoutInflater.from(context).inflate( R.layout.layout_listview_in_viewpager, container, false); adapter = new MergeAdapter(); sadapter = new StaggeredAdapter(BaseSampleActivity.this, R.id.imageView

库:

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;
    }
我想用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;
    }
然后它就像一个列表视图

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

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;
    }
然后它不会显示任何内容,也不会出现错误。
MergeAdapter
上的
addView()
是为
ListView
标题等而设计的。相反,您试图将
GridView
作为使用
MergeAdapter
的其他
AdapterView
中的一个元素。这是不受
MergeAdapter
支持的,将
GridView
放在另一个
AdapterView
中不太可能工作,无论您如何尝试


另外,我不建议将
适配器
设置为
静态
,当然也不建议将
合并适配器
,因为这会导致严重的内存泄漏(而且首先是不必要的)。

您的问题非常普遍。就像你的代码一样

private static MergeAdapter adapter = null;
adapter.addView(buildlabel3(context));
适配器为空,未初始化。所以无论你添加什么,它仍然是空的

我已经看到了MergeAdapter的soucre代码。它有一个构造函数:

public MergeAdapter() {
    super();
}
所以只需将代码更改为

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

然后再试一次

我被你所说的“它什么都没有显示”搞糊涂了。新的视图没有显示,还是原始视图也消失了?屏幕是完全空白的吗?它不会生成视图,因此视图不会出现。那么你的意思是说,不可能让mergeAdapter与grid view一起工作,或者说我做错了?@Marckaraujo:将
mergeAdapter
GridView
一起使用的方法是在
GridView
上调用
setAdapter()
,传入
MergeAdapter
。我没有尝试过这个,但我似乎记得其他人也尝试过,而且它是有效的。但是,这并不是您在第二段代码中要做的事情。我现在理解了我在PullToRefreshListView上使用setAdapter()传递MergeAdapter的问题。所以我用mergeAdapter构建了一些视图,然后将其设置为PullToRefreshListView。我知道,我只是裁剪了我的代码,没有多少信息来关注这个问题。在我的原始代码中,我使用adapter=newmergeadapter();,反正是thx