アダプタークラス内の監視可能なリストからデータを取得するAndroidアクティビティがあります。
アダプタクラスのgetView()
メソッドは次のとおりです。
_@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (inflater == null) {
inflater = (LayoutInflater) parent.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
// Perform the binding
ActivityTeamMessageListRowBinding binding = DataBindingUtil.inflate(inflater, R.layout.my_activity_list_row, parent, false);
binding.setInfo(list.get(position));
binding.executePendingBindings();
// Return the bound view
return binding.getRoot();
}
_
そして、これはうまく機能します。ただし、Androidの警告ViewAdapterからの無条件のレイアウトインフレーションが_ActivityTeamMessageListRowBinding binding ...
_行に表示されます。
私はこの問題を修正するためにViewHoldersを調査してきましたが、これを達成し、データバインディングを使用する方法がわからないようです。そしておそらく、リストが長いほど、ViewHolderを使用しないとパフォーマンスが低下します。
ビューバインダーを組み込むために私のgetView(...)
コードを拡張する方法を知っている人はいますか?私のmy_activity_list_row.xmlに3つのTextView
sと1つのImageView
があります。
これを試して:
_@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (inflater == null) {
inflater = ((Activity) parent.getContext()).getLayoutInflater();
}
// Perform the binding
ActivityTeamMessageListRowBinding binding = DataBindingUtil.getBinding(convertView);
if (binding == null) {
binding = DataBindingUtil.inflate(inflater, R.layout.my_activity_list_row, parent, false);
}
binding.setInfo(list.get(position));
binding.executePendingBindings();
// Return the bound view
return binding.getRoot();
}
_
ListView
でデータバインディングを使用したことはありませんが(RecyclerView
を使用します)、カフから外して、これを試してみます。ブレークポイントまたはロギングを使用して、convertView
がnull
でない場合に、getBinding()
からbinding
が返される頻度が高いことを確認します(おそらくすべて時間—データバインディングのキャッシングがどのように機能するかについて私はぼんやりしています)。