/////여기까지 정상작동 키입력
D/AndroidRuntime(11210): Shutting down VM
W/dalvikvm(11210): threadid=1: thread exiting with uncaught exception (group=0x421e8700)
E/AndroidRuntime(11210): FATAL EXCEPTION: main
E/AndroidRuntime(11210): java.lang.IllegalStateException: The content of the adapter has changed but ListView did
not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread.
[in ListView(2131230723, class android.widget.ListView) with Adapter(class com.example.makespinner.ItemAutoCompleteAdapter)]
E/AndroidRuntime(11210): at android.widget.ListView.layoutChildren(ListView.java:1557)
E/AndroidRuntime(11210): at android.widget.AbsListView.onLayout(AbsListView.java:2444)
E/AndroidRuntime(11210): at android.view.View.layout(View.java:15204)
E/AndroidRuntime(11210): at android.view.ViewGroup.layout(ViewGroup.java:4793)
E/AndroidRuntime(11210): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076)
E/AndroidRuntime(11210): at android.view.View.layout(View.java:15204)
E/AndroidRuntime(11210): at android.view.ViewGroup.layout(ViewGroup.java:4793)
E/AndroidRuntime(11210): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
E/AndroidRuntime(11210): at android.view.View.layout(View.java:15204)
E/AndroidRuntime(11210): at android.view.ViewGroup.layout(ViewGroup.java:4793)
E/AndroidRuntime(11210): at com.android.internal.widget.ActionBarOverlayLayout.onLayout
(ActionBarOverlayLayout.java:349)
E/AndroidRuntime(11210): at android.view.View.layout(View.java:15204)
E/AndroidRuntime(11210): at android.view.ViewGroup.layout(ViewGroup.java:4793)
E/AndroidRuntime(11210): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
E/AndroidRuntime(11210): at android.view.View.layout(View.java:15204)
E/AndroidRuntime(11210): at android.view.ViewGroup.layout(ViewGroup.java:4793)
E/AndroidRuntime(11210): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2260)
E/AndroidRuntime(11210): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2007)
E/AndroidRuntime(11210): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1249)
E/AndroidRuntime(11210): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6372)
E/AndroidRuntime(11210): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:791)
E/AndroidRuntime(11210): at android.view.Choreographer.doCallbacks(Choreographer.java:591)
E/AndroidRuntime(11210): at android.view.Choreographer.doFrame(Choreographer.java:561)
E/AndroidRuntime(11210): at android.view.Choreographer$FrameDisplayEventReceiver.run
----------------------------------
연락처를 받아와서검색해주는 어플인데요.
아주 불규칙하게 프로그램이 중지됩니다.
이거 왜이러는걸까요? 저는 다른 스레드를 만든적도 없습니다.
아래소스는 어댑터를 구현한것이구요.
class ItemAutoCompleteAdapter extends ArrayAdapter<Item> implements Filterable
{
private ArrayList<Item> totalItem;
private ArrayList<Item> resultList = new ArrayList<Item>();
private Context context;
//....중략
@Override
public View getView(int position, View rowView, ViewGroup parent)
{
// reuse the rowView if possible - for efficiency and less memory consumption
if (rowView == null)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.data_item, null);
ViewHolder viewHolder = new ViewHolder();
viewHolder.itemImage = (ImageView) rowView.findViewById(R.id.itemImage);
viewHolder.itemName = (TextView) rowView.findViewById(R.id.itemName);
viewHolder.itemDescription = (TextView) rowView.findViewById(R.id.itemDescription);
rowView.setTag(viewHolder);
}
ViewHolder holder = (ViewHolder) rowView.getTag();
Item item = resultList.get(position);
setItemImage(holder.itemImage, item.getItemPhotoUri());
holder.itemName.setText(item.getItemName());
holder.itemDescription.setText(item.getItemDescription());
return rowView;
}
private ArrayList<Item> autocomplete(String input)
{
//중략
}
@Override
public int getCount() { return resultList.size(); }
@Override
public Item getItem(int index) { return resultList.get(index); }
@Override
public Filter getFilter()
{
Filter filter = new Filter()
{
@Override
protected FilterResults performFiltering(CharSequence constraint
{
FilterResults filterResults = new FilterResults();
if(constraint == null )
{
notifyDataSetInvalidated();
filterResults.values = null;
filterResults.count = 0;
return filterResults;
}
else if (constraint != null)
{
// Retrieve the autocomplete results.
resultList = autocomplete(constraint.toString());
// Assign the data to the FilterResults
filterResults.values = resultList;
filterResults.count = resultList.size();
}
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results)
{
if (results != null && results.count > 0)
{
notifyDataSetChanged();
}
else
{
notifyDataSetInvalidated();
}
}
};
return filter;
}
}
도대체 어디가 불량인것일까요?.?
메인에서는 어댑터 설정하고
리스너 달아서 키입력시 getFilter.filter 호출해서 연락처 검색해주거든요..
안드로이드 공식홈에서 제공하는 소스를 최대한 이용했는데 왜그런걸까요...
능력자분들 도와주세요!!