ok, I finally have understand what is going on :
I have different layout on my list (R.layout.step_list_item, R.layout.step_list_item2 ...) for each type of item in my list. When I insert a new item, android try to re-use the layout which was previously in the list at the same position. And it use the wrong one because the type of the item has changed ... So I remove the "if (convertView == null)" test and re-inflate my layout each time and everything works fine now. morale : Premature optimization is the root of all evil. So now I've got a new question : isn't there a better way to do this ? It really seem awfully complicated just to have a list with different kind of items. On May 31, 10:36 pm, Christophe <[email protected]> wrote: > hello Brad, thanks for your reply. > > Isn't the call to super.getView(...) suppose to do this ?? I already > told the adapter which layout to use (see the constructor of my > adpater on my first post), so it should know which one to inflate. > > Anyways I tried something similar to what you suggested : > > if (convertView == null) { > convertView = > LayoutInflater.from(getApplicationContext()).inflate(R.layout.step_list_item, > null); > > } > > but I've got a similar nullPointerException when I call > "findViewById" : > > EditText ed = (EditText) > convertView.findViewById(R.id.list_item_sb); // return null > ed.setText("test"); // will crash > > Again, it works fine when the list is shown for the first time but it > crash when I use "adapter.notifyDataSetChanged()" ... > So "R.id.list_item_sb" is found in my layout the first time but not > the second time ??? > > This is getting confusing :( > > On May 31, 10:07 pm, Brad Gies <[email protected]> wrote: > > > You need something like this in the getView to create the view if it > > hasn't been created already.: > > > if (convertView == null) > > { > > LayoutInflater inflater = > > Groups.this.getLayoutInflater(); > > convertView = inflater.inflate(R.layout.groupitem, > > null); > > } > > > On 31/05/2010 12:58 PM, Christophe wrote: > > > > hello, > > > > I have written a custom ArrayAdapter for a ListActivity : > > > > private class StepItemAdapter extends ArrayAdapter<Step> { > > > public StepItemAdapter(Context context, List<Step> objects) { > > > super(context, R.layout.step_list_item, > > > R.id.list_item_sb, > > > objects); > > > } > > > > �...@override > > > public View getView(final int pos, View convertView, ViewGroup > > > parent) { > > > View v = super.getView(pos, convertView, parent); // > > > will crash > > > here > > > > // etc ... > > > } > > > } > > > > On the "onCreate" method of the activity I tell the activity to use > > > this adapter with a list of object I get from somewhere else > > > ("t.getSteps()") : > > > > adapter = new StepItemAdapter(this, t.getSteps()); > > > this.setListAdapter(adapter); > > > > Everything works fine and the activity is displayed. But if I add a > > > new object to the list and tell the adapter to refresh the view I've > > > got an error : > > > > t.getSteps().add(3, new Step()); > > > adapter.notifyDataSetChanged(); > > > > The "getView" method of my adapter is called, which is ok since the > > > list view need to be updated, but I've got an exception on the call to > > > "super.getView(pos, convertView, parent)". > > > > The stack trace : > > > > java.lang.NullPointerException > > > at > > > android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java: > > > 355) > > > at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323) > > > at pkr.tm.activities.EditTemplateActivity > > > $StepItemAdapter.getView(EditTemplateActivity.java:145) > > > at > > > android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java: > > > 220) > > > at android.widget.AbsListView.obtainView(AbsListView.java:1294) > > > at android.widget.ListView.makeAndAddView(ListView.java:1727) > > > at android.widget.ListView.fillDown(ListView.java:652) > > > at android.widget.ListView.fillSpecific(ListView.java:1284) > > > at android.widget.ListView.layoutChildren(ListView.java:1558) > > > at android.widget.AbsListView.onLayout(AbsListView.java:1147) > > > ... > > > > Do you guy have any ideas of what is going on ?? > > > -- > > Sincerely, > > > Brad Gies > > ----------------------------------------------------------------------- > > Bistro Bot - Bistro > > Blurbhttp://www.bgies.comhttp://www.bistroblurb.comhttp://www.bistrobot.com > > ----------------------------------------------------------------------- > > > Never doubt that a small group of thoughtful, committed people can > > change the world. Indeed. It is the only thing that ever has - Margaret Mead > > -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

