0

私は Android の初心者で、cwac-MergeAdapter の使用法を理解するのにいくつか問題があります。

MergeAdapter を使用してスピナーを作成しようとしています。MergeAdapter のインスタンスには、データベースからデータを正しく読み取る SimpleCursorAdapter と、(フッターとして) クリック可能な新しい TextView (またはボタン) が含まれている必要があります。

現在、db からのデータのみを含む mergeAdapter をスピナーにフィードすると、すべてが魅力的に機能します。ただし、新しいビューを追加すると、スピナー全体で単一の空白のエントリしか得られません。誰かがこれで私を助けてくれますか?

コードは次のとおりです。

essenceItems = new SimpleCursorAdapter(this, R.layout.db_row_view,
    essenceCursor, from, to);

    TextView addEssence = new TextView(getApplicationContext());
    addEssence.setTextColor(R.color.red);
    addEssence.setText("Add new item...");
    addEssence.setWidth(ViewGroup.LayoutParams.FILL_PARENT);
    addEssence.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
    addEssence.setOnClickListener(new OnClickListener() {

       public void onClick(View v) {
         startActivityForResult(new Intent(v.getContext(),
         EssencePopup.class), ADD_ESSENCE);

     }
     });
    ma = new MergeAdapter();
    ma.addAdapter(essenceItems);
    ma.addView(addEssence, true);
    spinner.setAdapter(ma);
4

1 に答える 1

2

Views個人を aMergeAdapterに追加して a で使用することをサポートする可能性は低いですSpinnerViewこれは、任意の のドロップダウンを作成する方法を何とか知っていることを意味しますView

私があなたのために持っている回避策は、あなたのフォークに以下を追加することですMergeAdapter:

public View getDropDownView(int position, View convertView, ViewGroup parent) {
  for (ListAdapter piece : pieces) {
    int size = piece.getCount();

    if (position < size) {
      return (((SpinnerAdapter)piece).getDropDownView(position, convertView, parent));
    }

    position -= size;
  }

return (null);
}

View次に、 を介して個人を追加する代わりに、追加データ用addView()に独自の個人を追加しますArrayAdaptersetDropDownViewResource()内のすべてのアダプタを呼び出すようにしてくださいMergeAdapter-- サンプル コードはこれを呼び出していないため、他の問題が発生します (たとえば、「スピナーの一部のエントリが空白になる」など)。

この変更を にマージするか、サブクラスをMergeAdapter作成する可能性があります。SpinnerMergeAdapterブラインドキャストはSpinnerAdapter怖いので、もう少し考えてみたいと思います。簡単なテストでは、上記のコードは問題なく動作するようです。


また、コードから をすべて削除し、必要に応じてまたはgetApplicationContext()に置き換えてください。を使用する理由がわかっている場合にのみ使用してください。thisWhateverYourActivityNameIs.thisgetApplicationContext()getApplicationContext()

于 2011-08-25T17:04:46.893 に答える