【问题标题】:MergeAdapter with GridviewMergeAdapter 与 Gridview
【发布时间】:2013-08-12 22:20:59
【问题描述】:

库:

我想用 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;
    }

然后它什么都不显示,也没有错误。

【问题讨论】:

  • 我对你所说的“它没有显示任何东西”感到困惑。新的 StaggeredGridView 没有出现,还是原来的视图也消失了?屏幕是完全空白的吗?
  • 它不构建视图,所以视图不会出现。

标签: android gridview commonsware-cwac


【解决方案1】:

MergeAdapter 上的addView() 专为ListView 标头等而设计。相反,您正试图将GridView 作为一个元素放在使用MergeAdapter 的其他一些AdapterView 中。 MergeAdapter 不支持这一点,并且无论您如何尝试,将 GridView 放在另一个 AdapterView 中都不太可能起作用。

另外,我不建议将Adapter 设为static,并且当然不是MergeAdapter,因为这将代表严重的内存泄漏(并且首先是不必要的)。

【讨论】:

  • 所以你的意思是不可能让 mergeAdapter 与网格视图一起工作,或者我做错了?
  • @Marckaraujo:将MergeAdapterGridView 一起使用的方法是在GridView 上调用setAdapter(),并传入MergeAdapter。我没有尝试过,但我似乎记得其他人有并且它有效。但是,这不是您在第二个代码块中所做的。
  • 我现在明白了,我在PullToRefreshListView上使用setAdapter()的问题,传入了MergeAdapter。所以我用 mergeAdapter 构建了一些视图,然后将其设置为 PullToRefreshListView。
【解决方案2】:

你的问题很笼统。和你的代码一样

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

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

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

public MergeAdapter() {
    super();
}

所以只需将您的代码更改为

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

然后再试一次。

【讨论】:

  • 不,伙计。我知道,我只是用很少的信息裁剪了我的代码来专注于这个问题。在我的原始代码中,我做了 adapter = new MergeAdapter();, thx 不管怎样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多