1

this error showing in my logcat

03-19 12:48:54.527: E/AndroidRuntime(2066): 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)]

Itemlistadapter.java

ublic class ItemListBaseAdapter extends BaseAdapter {
private static ArrayList<Recipedetails> 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<Recipedetails> 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<Recipedetails> items) {
    itemDetailsrrayList.clear();
    itemDetailsrrayList.addAll(items);
   notifyDataSetChanged();
}

static class ViewHolder {
        TextView txt_itemName;
        TextView txt_itemDescription;
        ImageView itemImage;
}
}    

soutindian.java

public class SouthIndian extends Activity {
ItemListBaseAdapter _itemListAdapter;
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ArrayList<Recipedetails> image_details = new ArrayList<Recipedetails>();

        _itemListAdapter = new ItemListBaseAdapter(this, image_details);

        final ListView lv1 = (ListView) findViewById(R.id.listV_main);
        lv1.setAdapter(_itemListAdapter);

        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();

                        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();
                        }

                }
        });

        refreshYourAdapter(GetSearchResults());
    }

    // THIS IS WHAT IT SHOULD LOOK LIKE MORE OR LESS. THIS IS AS MUCH AS I CAN HELP

    private void refreshYourAdapter(final ArrayList<Recipedetails> newData) {
         //this is what I meant. The error clearly states you are not updating the adapter on the UI thread
         runOnUiThread(new Runnable() {
             public void run() {
                 _itemListAdapter.refreshAdapter(newData);
             }
         });
    }

    private ArrayList<Recipedetails> GetSearchResults(){
        ArrayList<Recipedetails> results = new ArrayList<Recipedetails>();

        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;
    }
}    

Northindian.java

public class NorthIndian  extends Activity {
 ItemListBaseAdapter _itemListAdapter;


 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ArrayList<Recipedetails> image_details = new ArrayList<Recipedetails>();

        _itemListAdapter = new ItemListBaseAdapter(this, image_details);

        final ListView lv1 = (ListView) findViewById(R.id.listV_main);
        lv1.setAdapter(_itemListAdapter);

        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(NorthIndian.this, "You have chosen : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show();

                switch(obj_itemDetails.getImageNumber())
                {
                    case 1:
                         Intent newActivity = new Intent(NorthIndian.this, 
                                 AndroidTabLayoutActivity4.class);     
                         startActivity(newActivity);
                        break;

                    case 2:
                        Intent new1Activity = new Intent(NorthIndian.this, 
                                AndroidTabLayoutActivity5.class);     
                        startActivity(new1Activity);
                        break;

                    case 5:
                        Intent new2Activity = new Intent(NorthIndian.this, 
                                AndroidTabLayoutActivity6.class);     
                        startActivity(new2Activity);
                        break; 

                    case 4:
                        Intent new3Activity = new Intent(NorthIndian.this, 
                                AndroidTabLayoutActivity7.class);     
                        startActivity(new3Activity);
                        break;      

                   default:
                       Toast.makeText(NorthIndian.this, "Wrong Input", Toast.LENGTH_LONG).show();
                }
            }  
        });
        refreshYourAdapter(GetSearchResults());
    }
  private void refreshYourAdapter(final ArrayList<Recipedetails> newData) {
      //this is what I meant. The error clearly states you are not updating the adapter on the UI thread
      runOnUiThread(new Runnable() {
          public void run() {
              _itemListAdapter.refreshAdapter(newData);
          }
      });
 }

    private ArrayList<Recipedetails> GetSearchResults(){
        ArrayList<Recipedetails> results = new ArrayList<Recipedetails>();

        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("Sweets");
        item_details.setItemDescription("Tasty sweets made from indians");
        item_details.setImageNumber(5);
        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;
    }
}    

after clicking the first time in listview,it will goes to the function,if we come back again clicking the next item in the listview,it shows my application has stopped. My problem not solved i tried all the ways

4

1 回答 1

0

two code is needed in our listadapter

public synchronized   void refreshAdapter(ArrayList<Recipedetails> items) {
        //itemDetailsrrayList.clear();
        itemDetailsrrayList = items;
       notifyDataSetChanged();
    }

and our listview activity also

private void refreshYourAdapter(final ArrayList<Recipedetails> items) {
//this is what I meant. The error clearly states you are not updating the adapter on the UI thread
runOnUiThread(new Runnable() {
public void run() {
_itemListAdapter.refreshAdapter(items);
}
});
}

and one more code also in listview

 @Override
    protected void onResume() {
    super.onResume();
    results = new ArrayList<Recipedetails>(); 
    _itemListAdapter = new ItemListBaseAdapter(this, image_details);
    refreshYourAdapter(GetSearchResults());
    lv1.setAdapter(_itemListAdapter);

    }
于 2013-03-22T08:43:08.523 回答