Soru & Cevap

ListView deki itemların yerleri neden değişiyor? ...

01.04.2015 - 12:08

Merhabalar,

ListView içerisinde verilerim bulunuyor. Bu listenin herhangi bir itemındaki değeri artırıp o item'in verilerini güncelliyorum. Güncelleme işlemi gerçekleştirildiğinde listeyi aşağı-yukarı kaydırdığımda listedeki sayısını artırdığım item'ın yeri değişiyor. Tavsiyeleriniz nelerdir?

public class MainActivity extends ActionBarActivity {
    private int pos;
    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        listView = (ListView) findViewById(R.id.listView);
        listView.setAdapter(new CustomAdapter(MainActivity.this));

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                pos = position;
            }
        });

    }

    public class CustomAdapter extends BaseAdapter {
        private String[] array = {
                "Item 1",
                "Item 2",
                "Item 3",
                "Item 4",
                "Item 5",
                "Item 6",
                "Item 7",
                "Item 8",
                "Item 9",
                "Item 10",
                "Item 11",
                "Item 12",
                "Item 13",
                "Item 14",
                "Item 15",
                "Item 16",
                "Item 17",
                "Item 18",
                "Item 19",
                "Item 20",
                "Item 21"
        };
        public LayoutInflater inflater;
        private int countValue = 1;
        private ViewHolder holder;

        public CustomAdapter(Context context) {
            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public int getCount() {
            return array.length;
        }

        @Override
        public Object getItem(int position) {
            return array[position];
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.list_item, parent, false);
                holder = new ViewHolder();
                holder.item = (TextView) convertView.findViewById(R.id.item);
                holder.reduce = (Button) convertView.findViewById(R.id.reduce);
                holder.count = (TextView) convertView.findViewById(R.id.count);
                holder.increase = (Button) convertView.findViewById(R.id.increase);
                holder.increase.setTag(position);
                convertView.setTag(holder);
            } else
                holder = (ViewHolder) convertView.getTag();

            holder.item.setText(array[position]);
            holder.increase.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    countValue++;
                    updateItemAtPosition(pos);
                }
            });

            return convertView;
        }

        private void updateItemAtPosition(int position) {
            int visiblePosition = listView.getFirstVisiblePosition();
            View view = listView.getChildAt(position - visiblePosition);
            listView.getAdapter().getView(position, view, listView);
            holder.count.setText(String.valueOf(countValue));
        }

        class ViewHolder {
            TextView item, count;
            Button increase, reduce;
        }
    }
}

5 Görüntülenme

0 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.