如何使用adapter.notifyDataSetChanged(); 我必须使用这些行来解决我的错误

ItemListBaseAdapter.java

public class ItemListBaseAdapter extends BaseAdapter { private static ArrayList itemDetailsrrayList; private Integer[] imgid = { R.drawable.vegeterian, R.drawable.nonveg, R.drawable.pickels, R.drawable.soup, R.drawable.sweets, R.drawable.cakes, R.drawable.icecreams, R.drawable.chinesevegdishes, R.drawable.chinesenonveg, R.drawable.chinesenoodles, R.drawable.chinesesoup, R.drawable.godhumaivegadai, R.drawable.soyamorekoozh, R.drawable.tomatokulambu, R.drawable.tomatoupma, R.drawable.vadanavratrispecial, R.drawable.eggkurma, R.drawable.milagu, R.drawable.rasam, R.drawable.vegetablekootu, R.drawable.avial, R.drawable.kothavarangaicurry, R.drawable.allepeyfishcurry, R.drawable.spicymadraschicken, R.drawable.prawns, R.drawable.keralachickenstew, R.drawable.nilgirichickenkorma, R.drawable.pepperchickencurry, R.drawable.chettiandchicken, R.drawable.prawnmasala, R.drawable.beeffry, R.drawable.crispyfish, R.drawable.amlapickle, R.drawable.avakaipickle, R.drawable.capsicumpickle, R.drawable.lemonpickle, R.drawable.onionpickle, R.drawable.mangopickle, R.drawable.tendermangopickle, R.drawable.tomatopickle, R.drawable.chillipickles, R.drawable.gingerpickle, R.drawable.garlicsoup, R.drawable.mixedvegsoup, R.drawable.chickenmanchowsoup, R.drawable.cleartomatosoup, R.drawable.sweetcornvegetablesoup, R.drawable.prawnandnoodlesoup, R.drawable.beetrootsoup, R.drawable.capsicumsoup, R.drawable.muttonsoup, R.drawable.spinachsoup, R.drawable.vegcurry, R.drawable.mushroommutter, R.drawable.alooparatha, R.drawable.daltadka, R.drawable.aloomethi, R.drawable.rajma, R.drawable.paneerbhujri, R.drawable.alooghobi, R.drawable.aloosabzi, R.drawable.kadhaipaneer, R.drawable.chickenwithbellpeppers, R.drawable.butterchicken, R.drawable.fishkorma, R.drawable.prawnfry, R.drawable.tandoorichicken, R.drawable.maccherjholfish, R.drawable.shamikabab, R.drawable.saagmeat, R.drawable.sindhichickenbiryani, R.drawable.punjabichickencurry, R.drawable.gulabjamun, R.drawable.basundi, R.drawable.peda, R.drawable.badhamhalwa, R.drawable.coconutburfi, R.drawable.kulfi, R.drawable.ladoo, R.drawable.mysorepak, R.drawable.ricekheer, R.drawable.badam, R.drawable.cauliflowersoup, R.drawable.cucumbersoup, R.drawable.tomatosoup, R.drawable.mulligatawnysoup, R.drawable.greenpeassoup, R.drawable.northindianmuttonsoup, R.drawable.chickennoodlesoup, R.drawable.spicybeansoup, R.drawable.eggdropsoup, R.drawable.springvegsoup, R.drawable.mushroomandseitan, R.drawable.tofuwith3spices, R.drawable.creamyvegpie, R.drawable.grilledvegmedley, R.drawable.bakedsquash, R.drawable.africanchickenstew, R.drawable.westafricanchicken, R.drawable.africanyamsoup, R.drawable.chickenchilliroast, R.drawable.chilliblackbeans, R.drawable.williecake, R.drawable.pumpkingingercupcakes, R.drawable.doublelayerpumpkincheesecake, R.drawable.carrotcake, R.drawable.sexcake, R.drawable.chocolatechipicecream, R.drawable.cookieicecream, R.drawable.cinnamonicecream, R.drawable.appleicecream, R.drawable.walnut, R.drawable.chineseaubergins, R.drawable.spicycucumber, R.drawable.chinesemushrooms, R.drawable.chinesegobi, R.drawable.spicytofu, R.drawable.chinesetilchicken, R.drawable.chickenmoongali, R.drawable.sweetsourchicken, R.drawable.cherrychicken, R.drawable.mymasalachicken, R.drawable.coldseasamenoodles, R.drawable.sobanoodles, R.drawable.noodleswithtofu, R.drawable.chinesevegandbeef, R.drawable.noodleswithpepper, R.drawable.jhingasoup, R.drawable.masalachickensoup, R.drawable.cabbagesoup, R.drawable.chinesepumpkinsoup, R.drawable.baconsoup, }; private LayoutInflater l_Inflater; public ItemListBaseAdapter(Context context, ArrayList results) { itemDetailsrrayList = results; l_Inflater = LayoutInflater.from(context); } public int getCount() { return itemDetailsrrayList.size(); } public Object getItem(int position) { return itemDetailsrrayList.get(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = l_Inflater.inflate(R.layout.item_details_view, null); holder = new ViewHolder(); holder.txt_itemName = (TextView) convertView.findViewById(R.id.name); holder.txt_itemDescription = (TextView) convertView.findViewById(R.id.itemDescription); holder.itemImage = (ImageView) convertView.findViewById(R.id.photo); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.txt_itemName.setText(itemDetailsrrayList.get(position).getName()); holder.txt_itemDescription.setText(itemDetailsrrayList.get(position).getItemDescription()); holder.itemImage.setImageResource(imgid[itemDetailsrrayList.get(position).getImageNumber() - 1]); return convertView; } public synchronized void refreshAdapter(ArrayList items) { itemDetailsrrayList.clear(); itemDetailsrrayList.addAll(items); notifyDataSetChanged(); } static class ViewHolder { TextView txt_itemName; TextView txt_itemDescription; ImageView itemImage; } } 

Recipedetails.java

 public class Recipedetails { public String getName() { return name; } public void setName(String name) { this.name = name; } public String getItemDescription() { return itemDescription; } public void setItemDescription(String itemDescription) { this.itemDescription = itemDescription; } public int getImageNumber() { return imageNumber; } public void setImageNumber(int imageNumber) { this.imageNumber = imageNumber; } private String name ; private String itemDescription; private int imageNumber; } 

Listview.java

 public class SouthIndian extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final ArrayList image_details = GetSearchResults(); final ListView lv1 = (ListView) findViewById(R.id.listV_main); lv1.setAdapter(new ItemListBaseAdapter(this, image_details)); lv1.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView a, View v, int position, long id) { Object o = lv1.getItemAtPosition(position); Recipedetails obj_itemDetails = (Recipedetails)o; Toast.makeText(SouthIndian.this, "You have chosen : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show(); //final ArrayList act = GetSearchResults(); //if (act != null) switch(obj_itemDetails.getImageNumber()) { case 1: Intent newActivity = new Intent(SouthIndian.this, AndroidTabLayoutActivity.class); startActivity(newActivity); break; case 2: Intent new1Activity = new Intent(SouthIndian.this, AndroidTabLayoutActivity1.class); startActivity(new1Activity); break; case 3: Intent new2Activity = new Intent(SouthIndian.this, AndroidTabLayoutActivity2.class); startActivity(new2Activity); break; case 4: Intent new3Activity = new Intent(SouthIndian.this, AndroidTabLayoutActivity3.class); startActivity(new3Activity); break; default: Toast.makeText(SouthIndian.this, "Wrong Input", Toast.LENGTH_LONG).show(); } } }); runOnUiThread(new Runnable() { public void run() { ItemListBaseAdapter.refreshAdapter(item); //ItemListBaseAdapter.notifyDataSetChanged(); } }); } private ArrayList GetSearchResults(){ ArrayList results = new ArrayList(); Recipedetails item_details = new Recipedetails(); item_details.setName("Vegterian"); item_details.setItemDescription("Recipes made by raw materials"); item_details.setImageNumber(1); results.add(item_details); item_details = new Recipedetails(); item_details.setName("Non-Vegterian"); item_details.setItemDescription("Flesh of sweet animals"); item_details.setImageNumber(2); results.add(item_details); item_details = new Recipedetails(); item_details.setName("Pickels"); item_details.setItemDescription("Touchable dish by Homemade"); item_details.setImageNumber(3); results.add(item_details); item_details = new Recipedetails(); item_details.setName("Soups"); item_details.setItemDescription("Startup for our food"); item_details.setImageNumber(4); results.add(item_details); return results; } } 

和我的日志cat错误是

 03-19 05:04:35.103: E/AndroidRuntime(1110): FATAL EXCEPTION: main 03-19 05:04:35.103: E/AndroidRuntime(1110): 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(2131165193, class android.widget.ListView) with Adapter(class com.example.recipestutors.ItemListBaseAdapter)] 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.widget.ListView.layoutChildren(ListView.java:1544) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.widget.AbsListView.onTouchEvent(AbsListView.java:3403) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.View.dispatchTouchEvent(View.java:7239) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2168) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1903) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 03-19 05:04:35.103: E/AndroidRuntime(1110): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1953) 03-19 05:04:35.103: E/AndroidRuntime(1110): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1405) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.app.Activity.dispatchTouchEvent(Activity.java:2410) 03-19 05:04:35.103: E/AndroidRuntime(1110): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1901) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.View.dispatchPointerEvent(View.java:7419) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3220) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3165) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4292) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4271) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4363) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.os.MessageQueue.nativePollOnce(Native Method) 03-19 05:04:35.103: E/AndroidRuntime(1110): at android.os.MessageQueue.next(MessageQueue.java:125) 

在我的代码中,如何以及在何处使用adapter.notifyDataSetChanged() 单击列表视图中的第二项,应用程序已停止并显示如我在logcat中提到的错误

将此方法添加到适配器

 public synchronized void refresAdapter(ArrayList items) { itemDetailsrrayList.clear(); itemDetailsrrayList.addAll(items); notifyDataSetChanged(); } 

然后从您想要刷新适配器的地方进行此调用

 final Activity act = getActivity(); //only neccessary if you use fragments if (act != null) act.runOnUiThread(new Runnable() { public void run() { yourAdapter.refreshAdapter(item); } }); 

这应该可以解决你的问题

不要将itemDetailsrrayList作为static