2014-10-30 3 views
0

refreshinglist viewcustom adapter이라는 많은 문제가 있습니다. 내 목록보기를 새로 고칠 수있는 솔루션을 찾지 못하는 것 같습니다. 나는 notifyDataSetChangedlistView.invalidate을 시도했지만 아무것도 작동하지 않는 것 같습니다. 어떤 도움을 크게 얻을 수 있습니다. 감사합니다목록보기를 업데이트하거나 새로 고치는 방법

다음은 코드입니다.

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // Get extra data included in the Intent 
     Toast.makeText(getApplicationContext(), "Update Chat Ui", 
       Toast.LENGTH_LONG).show(); 
     commentList.invalidateViews(); 
     commentList.setAdapter(adapter); 
     adapter.notifyDataSetChanged(); 
     //adapter.notifyDataSetInvalidated(); 
    // adapter.notifyDataSetChanged(); 

    } 
}; 

protected void onPause() { 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(
      mMessageReceiver); 
    super.onPause(); 
}; 

비동기 작업 onPost() :

@Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 

     try { 
      adapter = new ListViewAdapter(PrivateMessages.this, arraylist); 

      commentList.setAdapter(adapter); 
      adapter.notifyDataSetChanged(); 

     } catch (Exception e) { 
     } finally { 

     } 

    } 

사용자 정의 어댑터 : 코드 아래

public class ListViewAdapter extends BaseAdapter { 

// Declare Variables 
UserFunctions mUserFunctions; 
Context context; 
ArrayList<HashMap<String, String>> data; 

Preferences mPreferences; 
public static int actualPosition; 
private static HashMap<String, String> resultp = new HashMap<String, String>(); 

boolean likeState; 

public ListViewAdapter(Context context, 
     ArrayList<HashMap<String, String>> arraylist) { 
    this.context = context; 
    data = arraylist; 

    mPreferences = new Preferences(context); 
    mUserFunctions = new UserFunctions(); 

} 

@Override 
public int getCount() { 
    return data.size(); 
} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

public View getView(final int position, View convertView, ViewGroup parent) { 
    // Declare Variables 

    ViewHolder holder = new ViewHolder(); 
    likeState = false; 
    resultp = data.get(position); 

    LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    if (resultp.get("message_admin").equals(mPreferences.getProfileId())) { 

     convertView = inflater.inflate(R.layout.comment_listview_item_user, 
       null); 
    } else { 
     convertView = inflater 
       .inflate(R.layout.comment_listview_item, null); 

    } 

    holder.userComment = (TextView) convertView 
      .findViewById(R.id.comment_item); 
    holder.commentTime = (TextView) convertView 
      .findViewById(R.id.time_of_comment); 

    holder.userComment.setText(resultp.get("message")); 
    holder.commentTime.setText(resultp.get("message_time")); 


    return convertView; 
} 

static class ViewHolder { 
    TextView userComment; 
    TextView commentTime; 

} 
} 
+0

왜 당신은 항상 convertView = inflater.inflate거야? 목록보기의 요점은 재활용 된보기를 사용한다는 것입니다. 변환하기 전에 convertview가 null인지 확인해야합니다. 이 문제는 귀하의 문제와 직접 관련이있을 수는 없지만 여전히 고쳐야합니다. – JanBo

+0

@JanBo 감사합니다 ... 그리고 나는 이것을 알고 있지만 어쨌든 다른 조건에서 2 개의 다른 레이아웃을 팽창시킬 필요가 있습니다. 그래서 지겨워서. 다른 길을 돌아 다니는 것은 나에게 널 포인터를 주었다. 글쎄, 나는 아직도 그것을 다시하려고 노력할 것이다. – addy123

+0

당신은 다른 레이아웃을 팽창시킬 수 있고 여전히 covertView를 사용합니다;) 조금 더 작업해야합니다. – JanBo

답변

0

모두 감사합니다,하지만 다음 코드를 통해 해결할 나는 마침내 수 :

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     new InitiateChatTask().execute(wish_user_id, 
       mPreferences.getProfileId()); 
     commentList.invalidateViews();   

    } 
}; 
0

당신은 다음을 수행 할 수 있습니다.

  1. arrayList.clear();
  2. ArrayList를 = 새로운 목록.
  3. commentList.invalidateViews();
  4. adapter = new ListViewAdapter (PrivateMessages.this, arraylist); commentList.setAdapter (adapter);

관련 문제