2017-05-18 10 views
0
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
if (convertView == null){ 
    convertView = ContactViewActivity.this.getLayoutInflater().inflate(R.layout.contact_view_field_row, 
    parent, false); 
} 

String value = (String)getItem(position); 

TextView fieldValue = (TextView)convertView.findViewById(R.id.contact_view_row_value); 
fieldValue.setText(value); 

return convertView; 
} 

上記のコードは、BaseAdapterクラスから取得したものです。それでは、convertViewに膨らんだビューを設定するポイントは何ですか? getViewの全体的なポイントは、ビューがない場合はビューを作成し、それに属性を与え、それを返し、アプリケーションでListViewの右に表示できるようにすることです。ではなぜfindViewById(R.id.contact_view_row_value); layoutInflaterで実際に何をしているのですか? convertViewと同じに設定しているので、convertView.findViewByIdを入力する必要はありません。私はそれが既に膨らんだXMLファイルの権利と同等であることを意味しますか?私はここではかなり混乱しています。私は本当に明確に理解しています。Androidスタジオ;変換ビューへのビューの膨張と保存のポイントは何ですか?

答えて

1

convertViewは再利用できるものなので、実行時には、データを更新する必要がある既存のViewが提供されているかどうか、または新しいViewを膨張させる必要があるかどうかはわかりません。

アプリケーションが起動すると、ListViewにすべてのデータが表示されるように、Viewsにはinflateが必要です。 インフレータは、リソースXMLをグラフィックオブジェクトに解析して、それをAndroidのContextで提供することを意味し、グラフィカルな階層でレンダリングされ相互作用する可能性のあるものになります。アプリケーションの後半で、Androidは、先に膨らんだViewを渡して、リソースを節約し、不必要なインフレを回避するのに役立ちます。そのため、convertViewnullと等しくないかどうかをチェックします。そうでない場合はの既存のViewを現在のインデックスに関連するデータを表示するものに変換することができます。

ただし、ListViewは推奨されなくなりました。代わりにRecyclerViewを使用してください。この動作はもう少し明白です。 exampleです

+0

ありがとう、それは今完璧な意味があります! –

+0

もう一つのことは、 'convertView.findViewById();'は 'findViewById();'の代わりに何をしているのですか? –

+0

@StephenKandeh検索を少し絞る;あなたが探している 'View'を含んでいる' convertView'を含む親の 'View'検索のすべての内容を親の' View'で検索するのではなく、すぐに 'convertView'に絞り込むことができます。 –

関連する問題