34

ドキュメントには次のように記載されています。

レイアウトのコンテンツが動的であるか事前に決定されていない場合、AdapterView をサブクラス化するレイアウトを使用して、実行時にレイアウトにビューを設定できます。AdapterView クラスのサブクラスは、Adapter を使用してデータをそのレイアウトにバインドします。

しかし、ほとんどのチュートリアルは約ListViewGridViewSpinnerおよびにありGalleryます。

から直接サブクラスを拡張しようとしていAdapterViewます。コンテンツがアダプターに依存するカスタムビューを作成する必要があります。

どうすればこれを行うことができ、どのメソッドをオーバーライドする必要がありますか?

4

5 に答える 5

24

最初に、AdapterViewすべての「動的または事前に決定されていない」ビューをAdapterView. 拡張するビューを作成した方がよい場合もありますViewGroup

使用したい場合は、この本当に素晴らしい例AdapterViewを見てください。GitHub にはアダプターを使用したカスタム ビューが多数あります。これをチェックしてください(拡張ViewGroup

于 2013-02-08T07:48:20.183 に答える
6

これはあなたの質問に対する完全な答えではないかもしれませんが、私はおそらくあなたを導くことができる出発点または指針を示しています:

Sony Developer チュートリアル - 3D ListView

于 2013-02-14T04:27:31.203 に答える
5

ListViewextendsAbsListViewは次に extends を拡張しAdapterView<ListAdapter>ます。したがって、そのようなカスタム ビューをゼロから実装する必要がある場合は、これらのクラスのソース コードを確認できます。

しかし、注意してください、それはかなりの作業です。おそらく、既存のクラスの 1 つを使用して外観を微調整するだけで十分かもしれません。

于 2013-02-07T19:31:17.870 に答える
-2

次のようなものを作成できます。

public class SampleAdapter extends BaseAdapter {

public SampleAdapter() {
  // Some constructor
}

public int getCount() {
  return count; // Could also be a constant. This indicates the # of times the getView gets invoked.
}

public Object getItem(int position) {
    return position; // Returns the position of the current item in the iteration
}

public long getItemId(int position) {
  return GridView.INVALID_ROW_ID;
}

public View getView(int position, View convertView, ViewGroup parent) {
  View view = null;

  view = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.some_layout, null);
  view.setLayoutParams(new GridView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
view.setBackgroungColor(Color.RED);

  return view;
}

}

そして、これは次のように呼び出すことができます:

GridView sampleView = (GridView) linearLayout.findViewById(R.id.sample_layout);
sampleView.setAdapter(new SampleAdapter());
于 2013-02-04T05:51:20.930 に答える