refreshing
list view
에 custom adapter
이라는 많은 문제가 있습니다. 내 목록보기를 새로 고칠 수있는 솔루션을 찾지 못하는 것 같습니다. 나는 notifyDataSetChanged
과 listView.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;
}
}
왜 당신은 항상 convertView = inflater.inflate거야? 목록보기의 요점은 재활용 된보기를 사용한다는 것입니다. 변환하기 전에 convertview가 null인지 확인해야합니다. 이 문제는 귀하의 문제와 직접 관련이있을 수는 없지만 여전히 고쳐야합니다. – JanBo
@JanBo 감사합니다 ... 그리고 나는 이것을 알고 있지만 어쨌든 다른 조건에서 2 개의 다른 레이아웃을 팽창시킬 필요가 있습니다. 그래서 지겨워서. 다른 길을 돌아 다니는 것은 나에게 널 포인터를 주었다. 글쎄, 나는 아직도 그것을 다시하려고 노력할 것이다. – addy123
당신은 다른 레이아웃을 팽창시킬 수 있고 여전히 covertView를 사용합니다;) 조금 더 작업해야합니다. – JanBo