0
所以我在我的應用程序中使用衆所周知的ViewHolder模式。我ViewHolder:問題與ViewHolder模式
protected static class ViewHolder{
final ImageView itemImage;
final TextView txtName;
final TextView txtTitle;
final WebView webView;
public ViewHolder (final ImageView itemImage, final TextView txtName, final TextView txtTitle, final WebView webView){
this.itemImage = itemImage;
this.txtName = txtName;
this.txtTitle = txtTitle;
this.webView = webView;
}
public ViewHolder (View convertView){
itemImage = (ImageView) convertView.findViewById(R.id.fav_item_icon);
txtName = (TextView) convertView.findViewById(R.id.fav_item_name);
txtTitle = (TextView) convertView.findViewById(R.id.fav_item_title);
webView = (WebView) convertView.findViewById(R.id.fav_webView);
}
}
所以,一切工作正常,如果我用1號構造喜歡使用它:
...
public View getView(final int position, View convertView, final ViewGroup parent) {
final Searchable searchResultsItem = searchResults.get(position);
ViewHolder viewHolder = null;
if (convertView==null){
convertView = inflater.inflate(R.layout.search_list_item, null);
final ImageView itemImage = (ImageView) convertView.findViewById(R.id.search_item_icon);
final TextView txtName = (TextView) convertView.findViewById(R.id.search_item_name);
final TextView txtTitle = (TextView) convertView.findViewById(R.id.search_item_title);
final WebView webView = (WebView) convertView.findViewById(R.id.search_webView);
viewHolder = new ViewHolder(itemImage, txtName, txtTitle, webView);
convertView.setTag(viewHolder);
}else
viewHolder = (ViewHolder)convertView.getTag();
viewHolder.webView.setFocusable(false);
...
,但如果我嘗試使用第二個構造失敗:
...
public View getView(final int position, View convertView, final ViewGroup parent) {
final Searchable searchResultsItem = searchResults.get(position);
ViewHolder viewHolder = null;
if (convertView==null){
convertView = inflater.inflate(R.layout.search_list_item, null);
viewHolder = new ViewHolder(convertView);
convertView.setTag(viewHolder);
}else
viewHolder = (ViewHolder)convertView.getTag();
viewHolder.webView.setFocusable(false);
...
它在線viewHolder.webView.setFocusable(false)
與NPE碰撞。當我嘗試調試它說創建的ViewHolder實例的所有字段爲空。爲什麼會發生?
OMG,謝謝。它的所有關於我的愚蠢copypaste :)代碼看起來非常相似,所以我沒有注意到這一點。 – Stan 2013-04-20 05:35:36
有趣的是,您在ListViewItem的每個實例中都使用了webview。它的應用程序有多穩定? – 2013-04-20 20:55:14
我不能肯定地說。至少我沒有遇到與WebView相關的任何錯誤。我不喜歡在ListView項目中使用webviews的想法,但我不能改變它(cuz API發送給我的HTML頁面作爲信息顯示)。我可以肯定地說,這個模式在ListView滾動上產生滯後,而且在滾動ListView時刷新方面速度太慢。確切地說, – Stan 2013-04-22 07:39:32