일부 사용자의 Crashlytics에서 이상한 NullPointerException이 발생했습니다.ListView에서 null 항목을 클릭하는 방법은 무엇입니까?
내가 BaseAdapter에서 구현되는 어댑터가 있습니다
abstract public class BaseListAdapter<T> extends BaseAdapter {
private final ArrayList<T> items = new ArrayList<T>();
....
@Override
public T getItem(int position) {
return items.get(position);
}
....
}
그리고 콘크리트 클래스 :
나는의 getView에서 NullPointerException이 (이 어댑터 I에 null을 넣으면 보시다시피class MessagesAdapter extends BaseListAdapter<MessagesListItem> {
....
@Override
public View getView(int position, View view, ViewGroup parent) {
if (view == null)
view = View.inflate(getContext(), R.layout.message_listitem, null);
MessagesListItem item = getItem(position);
NetworkImageView avatar = (NetworkImageView) view.findViewById(R.id.message_listitem_avatar);
ImageView online = (ImageView) view.findViewById(R.id.message_listitem_online);
TextView nick = (TextView) view.findViewById(R.id.message_listitem_nick);
TextView preview = (TextView) view.findViewById(R.id.message_listitem_preview);
TextView unread = (TextView) view.findViewById(R.id.message_listitem_unread);
avatar.setImageUrl(item.userAvatar, MyApp.getInstance().getImageLoader());
online.setVisibility(item.userOnline? View.VISIBLE : View.GONE);
nick.setText(String.format("%s, %d", item.userNick, item.userAge));
preview.setText(item.preview);
unread.setText(String.valueOf(item.unread));
unread.setVisibility(item.unread == 0? View.GONE : View.VISIBLE);
return view;
}
....
}
.. .) 방법. 그러나 나는 그렇지 않다.
나는이 구체적인 클래스와 연결된 인스턴스화 된 형태의 ListView를 가지고있다. 그리고 OnItemClickListener를 구현했습니다 :
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Adapter adapter = parent.getAdapter();
MessagesListItem messagesListItem = (MessagesListItem) adapter.getItem(position);
User user = messagesListItem.getUser(); //<-- I got NullPointerException here
....
}
어떻게 이런 일이 발생할 수 있습니까? 이 어댑터는 HeaderViewListAdapter
에 래핑되지만 클래스 캐스트 예외는 없습니다. 또한 getView() null 포인터를 얻지 못했습니다. 이 방법을 사용하면됩니다.
나는이 문제가 안드로이드 2에서만 일어난다는 것을 알았다. 나는 모든 것을 시도했지만 이것을 재현하지 못했다.
내가 놓친 것? 아무도 아이디어를 고쳐서 어떻게 고쳐 줄까? 또는이 문제를 확인/재현하는 방법은 무엇입니까?
https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/widget/HeaderViewListAdapter.java @ : 포장 어댑터 위치를 조정하기 때문에
영향을받지되는 어댑터의 위치 (0 목록에 여전히 첫 번째 항목입니다) null, false)'하지만 어떻게 든 사용자는 여전히 헤더를 클릭 할 수 있습니다. 아마 이것은 안드로이드의 버그입니다. – neworld
addFooterView (view)를 사용하여 꼬리말이 있습니까? 그렇지 않으면 notifyDataSetChanged (orInvalidated)를 호출하지 않고 배열을 백업하는 목록을 변경하는 것이 가능합니까 – FunkTheMonk
바닥 글과 동일하게 수행했습니다. 'ArrayList'보다 새로운 것이 경계 예외를 던지거나'getView()'가 널 포인터를 던 졌기 때문에 당신의 다음 문제를 생각하지 않습니다. 그러나 전체 시간에는'OnItemClickListener' 만 있습니다. – neworld