You are using convertView object which is a recycled view.
On Thu, Apr 8, 2010 at 2:42 AM, Binesy <[email protected]> wrote:
> Hi,
>
> I have been having some strange behavior when refreshing a listview
> from a button in a list item. Say you have a list of 4 items, indexes
> 0-3 and you click on item 4, and print the index. 3 is printed
> correctly, then i refresh the list. I click on item 4 again, but this
> time index 0 is printed, click again and we are back to 3. Why is
> this happening and how can I fix it?
>
> I have included some source below for you to have a look at how I have
> done this. Any help is much appreciated
>
> Binesy
>
> public class CrazyList extends Activity {
>
> private static final String TAG = "CRAZY LIST";
>
> public class Item {
> public String name = null;
> public int counter = -1;
>
> public Item(String n) {
> name = n;
> counter = 0;
> }
> }
>
> private ArrayList<Item> names = null;
> private MyAdapter adapter = null;
>
>
> @Override
> public void onCreate(Bundle savedInstanceState) {
> super.onCreate(savedInstanceState);
> setContentView(R.layout.main);
>
> names = new ArrayList<Item>();
> names.add(new Item("Ross"));
> names.add(new Item("Fred"));
> names.add(new Item("Bob"));
> names.add(new Item("Frank"));
>
> ListView list = (ListView)findViewById(R.id.ListView01);
> adapter = new MyAdapter();
> list.setAdapter(adapter);
> }
>
> private void updateButtonText(int index) {
> names.get(index).counter++;
> adapter.notifyDataSetChanged();
> }
>
> private class MyAdapter extends BaseAdapter {
>
> @Override
> public int getCount() {
> return names.size();
> }
>
> @Override
> public Object getItem(int position) {
> return names.get(position);
> }
>
> @Override
> public long getItemId(int position) {
> return position;
> }
>
> @Override
> public View getView(int position, View convertView,
> ViewGroup
> parent) {
> Container c = null;
>
> if(convertView == null) {
> convertView =
> View.inflate(getApplicationContext(), R.layout.item,
> null);
> c = new Container();
>
> c.text = (TextView)
> convertView.findViewById(R.id.TextView01);
> c.button = (Button)
> convertView.findViewById(R.id.Button01);
> c.button.setTag(position);
>
> c.button.setOnClickListener(new
> OnClickListener() {
>
> @Override
> public void onClick(View v) {
> int number =
> (Integer)v.getTag();
> Log.d(TAG, "Button clicked
> is " + number);
> updateButtonText(number);
> }
> });
>
> convertView.setTag(c);
> }
> else
> c = (Container) convertView.getTag();
>
> c.text.setText(names.get(position).name);
> c.button.setText(names.get(position).counter + "");
>
> return convertView;
> }
>
> public class Container {
> public TextView text = null;
> public Button button = null;
> }
> }
> }
>
> --
> 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]<android-developers%[email protected]>
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
>
> To unsubscribe, reply using "remove me" as the subject.
>
--
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