2016-03-23 7 views
0
@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    ViewHolder holder; 
    if (convertView == null) 
    { 
     holder = new ViewHolder(); 
     View custView = new CustomView(false, this.getItem(position), mContext, position).getView(); 
     holder.customView = custView; 
     custView.setTag(holder); 
    } 
    else 
    { 
     holder = (ViewHolder) convertView.getTag(); 
     custView = holder.customView; 
    } 
    return custView ; 
} 



private static class ViewHolder 
{ 
    View customView; 
} 

これはのCustomViewの一部で重複しています。 しかし、それはビューを複製する私のリストを台無しになる。ViewHolderパターンは、リストビュー

+2

パフォーマンス上の理由からこのパターンを使用する場合は、['RecyclerView'](http://developer.apple.com)を使用することをお勧めします。 android.com/reference/android/support/v7/widget/RecyclerView.html)。 – yennsarah

+0

私はすでにプロジェクトで複数のリストビューを持っていますが、それは巨大なプロジェクトです。残念ながら、それらのすべてを現在置き換えることは選択肢ではありません。 古いリストと良いリストビューで問題を解決する方法はありますか? – BVtp

+0

'this.getItem(position)'と 'position'をコンストラクタに渡さないでください...代わりに、fx:' bind(...) 'というメソッドをparamsという2つのもので作り、return statmentの直前に呼び出します。 'getView' ...一つのビューしかない場合、ViewHolderパターンは必要ありません。' convertView'は常にnullか 'CustomView'でしょう。 – Selvin

答えて

0

私はあなたのビューのデータをCustomViewで設定していると仮定します。そのようにしないでください。そのアダプタのgetViewメソッドでビュー・データを設定する必要があります。ここで

は、ビューホルダーパターンを使用する正しい方法です:

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    ViewHolder holder; 
    if (convertView == null) { 
     holder = new ViewHolder(); 
     // I don't know what you are doing with the boolean value, item or position... 
     convertView = new CustomView(false, this.getItem(position), mContext, position).getView(); 
     holder.mCustomViewsTextView = (TextView) convertView.findViewById(R.id.customTextView); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.mCustomViewsTextView.setText = "Item position: " + position; 

    return convertView; 
} 

private static class ViewHolder { 
    TextView mCustomViewsTextView; 
    // Other views that are in your CustomView 
    // ... 
} 


EDIT 1:
あなたがそのようにしたくない場合は、あなたがするセッターを追加する必要がありますあなたのCustomViewを呼び出し、それらをgetViewメソッドから呼び出します。私はあなたがいない場合は、GetViewメソッドでのCustomViewのデータを更新する必要があると言うしようとしています、だけでなく、あなたが得た後、何が起こるかの結果...


EDIT 2:
あなたのビューホルダーパターンには何の意味もありません。

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    CustomView customView = (CustomView) convertView; 
    if (customView == null) { 
     customView = new CustomView(false, this.getItem(position), mContext, position).getView(); 
    } 

    // You need to add these setters to your CustomView 
    customView.setCustomDataObject(this.getItem(position)); 
    customView.setPosition(position); 
    customView.setCameFromA(false); 

    return customView; 
} 
+0

このようにするのは簡単でした。どのように見えるかを決定する多くのロジックがCustomViewにあります。 '' mCustomsViewTextView = "test" 'などのようなものを使うことはできません。 – BVtp

+0

さて、私は答えを編集させてください – vilpe89

+0

残念ながらそれは動作しません..アイテムが右に表示されていません – BVtp

関連する問題