SimpleAdapterをサブクラス化し、位置に基づいて色を変更すること(および要素をより美しく、互いに区別できるようにする他のオプション)を試してみたかったのですが、getViewメソッドを上書きするのに問題があります。SimpleAdapterクラスの元のgetViewメソッドで呼び出されるメソッド(createViewFromResource)からコードをコピーしたところ、コードは次のようになりました。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater)thecontext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(layoutResource, parent, false);
} else {
v = convertView;
}
bindView(position, v);
return v;
}
元のアダプタソースからの95%のコピーペーストであると言ったので、ここではゲームを壊すものは何もありません。サブクラスでこれらにアクセスできないため、スーパークラスで宣言されたプライベート変数の代わりにコンストラクタからいくつかの変数を取得しました。私の問題は、ビューが返される直前に呼び出されるbindViewメソッドです。Eclipseはこれが何をしているのかについてのヒントを私に与えておらず、私のサブクラスからもそれを呼び出すことができないようです。
メソッドbindView(int、View)は、ChangingColorAdapter型に対して未定義です。
元のソースからコピーしたものの、上記のコードを使用すると、これが得られます。私には少し奇妙に思えます。私はAPIレベル8(2.2)でプログラミングしていて、ソースを添付しています。SimpleAdaptersの元のソースを見ると、エディターはbindView呼び出しの行き先を教えてくれませんが、エラーは発生しません。
ここで何か問題がありましたか、それともこの問題の原因は何ですか?bindViewメソッドに関するドキュメントや説明が見つからないようです。ほとんどの場合、カーソルアダプターからの実装例です。どんなヒントも素晴らしいでしょう。
乾杯