0

ライブラリ:

MergeAdapter で gridview アダプターを追加したいと考えています。

第1の方法、アダプターを設定した場合:

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);

次に、リストビューのように機能します。

第 2 の方法、ビューを作成する場合:

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;
    }

その後、何も表示されず、エラーも発生しません。

4

2 に答える 2

0

addView()onはヘッダーなどMergeAdapter用に設計されています。代わりに、を使用している他の要素の中にListViewa を要素として配置しようとしています。これは ではサポートされておらず、別の内部にa を配置することは、どのようにしようとしてもうまくいかない可能性があります。GridViewAdapterViewMergeAdapterMergeAdapterGridViewAdapterView

Adapterまた、 bestaticを作成することはお勧めしません。もちろんaも作成しないでくださいMergeAdapter。重大なメモリ リークが発生する可能性があるためです (そもそも不要です)。

于 2013-08-13T00:04:06.803 に答える
0

あなたの問題は非常に一般的です。あなたのコードのように

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

アダプタは null で、初期化されていません。したがって、何を追加しても、まだ null です。

MergeAdapter のソースコードを見てきました。コンストラクタがあります:

public MergeAdapter() {
    super();
}

コードを次のように変更するだけです

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

してから再試行してください。

于 2013-08-13T00:16:56.377 に答える