2010-12-30 12 views
1

私は次のような問題があり、しばらく探したが、ネットからのすべてのソリューションを持っていない:getViewメソッド()(notifyDatasetChangedに呼び出されません)

私が持っていますカスタムリストビューには、各項目は以下のレイアウト(私は不可欠なポスト)があります。

<LinearLayout> 
<ImageView android:id="@+id/friendlist_iv_avatar" /> 
<TextView andorid:id="@+id/friendlist_tv_nick_name" /> 
<ImageView android:id="@+id/friendlist_iv_status_icon" /> 
</LinearLayout> 

をそして、私は上記のレイアウトから膨張されたクラスFriendRowItem、持っている:メインで

​​3210

を活動、私はカスタムアダプターと、lvMainListView:カスタムリストビューをaveの(そのクラスArrayAdapterを拡張 - もちろんオフ:メソッドgetViewメソッドをオーバーライドする)、アダプタのデータ・セットがある:ArrayList<Friend> friends

private class FriendRowAdapter extends ArrayAdapter<Friend> { 

    public FriendRowAdapter(Context applicationContext, int friendlistRow, 
    ArrayList<Friend> friends) { 
    super(applicationContext, friendlistRow, friends); 
    } 

    @Override 
    public View getView(int position,View convertView,ViewGroup parent) { 
    Friend friend = getItem(position); 
    FriendRowItem row = (FriendRowItem) convertView; 
    if (row == null) { 
    row = new FriendRowItem(ShowFriendsList.this.getApplicationContext()); 
    } 
    row.setPropeties(friend); 
    return row; 
    } 
} 
  • 問題が場合であります友人のステータスをOFFLINEからONLINEに変更してから、notifyDataSetChanged()を呼び出すと、何も起こりません。その友達のステータスアイコンは変更されません。
    私はデバッグを試み、コードを見ました:notifyDataSetChanged()は呼び出されますが、カスタムgetView()は起動されません!

Androidでは正常ですか、何か間違ったことはありますか? (私はAndroid 1.5を使用しています)。

が、私は申し訳ありませんが、事前に
息子

答えて

12

をありがとう、
は私がちょうど発見した:私は(メソッドがnotifyDatasetChangedと呼ばれるために)別のスレッドで(実際には、私はスマックAPIを使用していますチャットクライアントを開発する - notifyDatasetChanged()メソッドは、別のスレッドで実行されるsmackのリスナーで呼び出されます)。
正解:notifyDatasetChangedはこのように呼ばれるべき:

lvFriendList.post(new Runnable() { 

     @Override 
     public void run() { 
      adapter.notifyDataSetChanged();   
     } 
    }); 

に彼らが同じ問題を満たしている場合、私は、これは誰かの時間を惜しまことを願っています:)。

+0

Thxを追加する必要があり、あなたは私の怒りのいくつかの時間を保存:) – Intrepidd

+0

これは私も下のこれをしなければならないということを意味していますか? @Override保護ボイドonPostExecute(ブールisSearchItemNotFound){ mAgendaAdapterObj.notifyDataSetChanged()。 mAgendaRv.setAdapter(mAgendaAdapterObj); } –

2

私は同じ問題を抱えていました。あなたのアダプタファイル内

@Override 
public int getCount() { 
    return YOURLIST.length; 
} 

関連する問題