私の現在のプロジェクトでは、BaseAdapter(ガイドとしてチュートリアルのEfficientAdapterを使用)を拡張し、それぞれ独自のカスタムビューを持つ異なるカスタムセルタイプを扱いました。これらのセルタイプの中には、非同期操作(メディアの再生や記録など)を開始するものがあります。彼らが所属する活動がなくなると(いくつかの他の細胞タイプが起こる可能性がある)それらを一時停止したいと思います。特定のビューに、それが属する「ListActivity」がなくなることを通知する方法はありますか?カスタムアダプターが所有しているビューが消えていることをビューに通知するにはどうすればよいですか?
@Override
public void onPause() {
super.onPause();
for (int i = 0; i < adapter.getCount(); i++) {
CustomCellHolder holder = adapter./* Some magic goes here */;
holder.handlePause();
}
}
が、私は、リストアダプタが所有するビューを反復処理する方法を見つけ出すことはできません。
私が最初に考えたのは活動のonPause()
方法で意見を反復することでした。それを行う方法はありますか、または私は間違った木を吠えますか?あなたはArrayAdapterを使用している場合
public View getView(final int position, View convertView, ViewGroup parent) {
CustomCellHolder holder;
if (convertView == null) {
/* Create and cache a new view */
holder = newHolderForItem(someArrayListOfObjects.get(position));
holder.setItem(feature.attributes.get(position));
holder.setActivity(MyListActivity.this);
convertView = holder.getView();
} else {
/* Load a cached view */
holder = (CustomCellHolder) convertView.getTag();
holder.setItem(feature.attributes.get(position));
holder.setActivity(MyListActivity.this);
}
holder.doSomeStuff();
return convertView;
}
私の意見では、どのようなロジック(再生/記録メディア)をしていても、ビューの責任を負わないほうがよいです。コードをリファクタリングして、onPauseでメディアを一時停止させることがアクティビティの責任となるようにします。 – gngr44
これは確かに魅力的ですが、このアクティビティでは数多くの異なるタイプのビュー(および対応するホルダー/コントローラ)、場合によってはそれぞれのタイプのインスタンスがあります。セルごとのコントローラに責任を委譲するのではなく、(非常に長い)アクティビティにすべてのロジックを置くという見通しに戸惑う。 –
その場合、リストビューの子を反復してみましたか?また、どのアダプターを使用していますか? – gngr44