Заполнение ListView,используя свой адаптер на базе BaseAdapt

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
VladimirFA51
Сообщения: 6
Зарегистрирован: 30 окт 2015, 11:01

Заполнение ListView,используя свой адаптер на базе BaseAdapt

Сообщение VladimirFA51 » 03 ноя 2015, 14:09

Всем привет,меня интересует кое-какой вопрос,я прочитал урок №54 (http://startandroid.ru/ru/uroki/vse-uro ... apter.html),решил сделать что-то наподобие продуктового магазина,где есть 5 товаров.

Код: Выделить всё

public class Product {
//Закидываем значения в массивы
String name[]={"Рыба","Мясо","Молоко","Сосиски","Сыр"}; //Наименования товаров
int image[]={R.drawable.fish,R.drawable.meat,R.drawable.milk,R.drawable.sausage,R.drawable.cheese};//Изображения
int price[]={300,300,400,600,700};//Цена
boolean box; // Это чекбокс,проверяет,поставлена галка или нет(Возвращает false/true)

    Product(String[] _describe, int[] _image, int[] _price, boolean _box) { //Класс описания товара,в аргументах строковое значение описания,изображение,цена,чекбокс
        name = _describe;
        price = _image;
        image = _price;
        box = _box;
    }
}
Класс Адаптера:

Код: Выделить всё

public class BoxAdapter extends BaseAdapter {
    Context ctx;
    LayoutInflater lInflater;
    ArrayList<Product> objects;

    BoxAdapter(Context context, ArrayList<Product> products) {
        ctx = context;
        objects = products;
        lInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return objects.size();
    }

    @Override
    public Object getItem(int position) {
        return objects.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            view = lInflater.inflate(R.layout.items, parent, false);
        }
        Product p = getProduct(position);

        ((TextView) view.findViewById(R.id.textView2)).setText(p.name[position]);
        ((TextView) view.findViewById(R.id.textView3)).setText(p.price[position]);
        ((ImageView) view.findViewById(R.id.imageView)).setImageResource(p.image[position]);


        CheckBox cBuy = (CheckBox) view.findViewById(R.id.checkBox);
        cBuy.setOnCheckedChangeListener(myCheckChangList);
        cBuy.setTag(position);
        cBuy.setChecked(p.box);
        return view;
    }

    Product getProduct(int position) {
        return ((Product) getItem(position));
    }

    ArrayList<Product> getBox() {
        ArrayList<Product> box = new ArrayList<Product>();
        for (Product p : objects) {
            if (p.box) {
                box.add(p);
            }
        }
        return box;
    }
    // обработчик для чекбоксов
    OnCheckedChangeListener myCheckChangList = new OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView,
                                     boolean isChecked) {
            // меняем данные товара (в корзине или нет)
            getProduct((Integer) buttonView.getTag()).box = isChecked;
        }
    };
}
MainActivity:

Код: Выделить всё

public class MainActivity extends AppCompatActivity {
    ArrayList<Product> products = new ArrayList<Product>();
    BoxAdapter boxAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // создаем адаптер
        fillData();
        boxAdapter = new BoxAdapter(this, products);

        ListView lvMain=(ListView)findViewById(R.id.listView);
        lvMain.setAdapter(boxAdapter);
    }
void fillData(){
    for (int i=1;i<5;i++){
       //????
    }
}

    // выводим информацию о корзине
    public void showResult(View v) {
        String result = "Товары в корзине:";
        for (Product p : boxAdapter.getBox()) {
            if (p.box)
                result += "\n" + p.name;
        }
        Toast.makeText(this, result, Toast.LENGTH_LONG).show();
    }
}
Как можно заполнить ListView?Что указывать?Я пытался указывать так:

Код: Выделить всё

        String name[]={"Рыба","Мясо","Молоко","Сосиски","Сыр"};
    int image[]={R.drawable.fish,R.drawable.meat,R.drawable.milk,R.drawable.sausage,R.drawable.cheese};
    int price[]={300,300,400,600,700};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // создаем адаптер
        fillData();
        boxAdapter = new BoxAdapter(this, products);

        ListView lvMain=(ListView)findViewById(R.id.listView);
        lvMain.setAdapter(boxAdapter);
    }
void fillData(){
    for (int i=1;i<5;i++){
        products.add(new Product(name[i], image[i],
                price[i], false));
    }
};
Но мне выводит,что я указываю не те аргументы.Вот скрин :
http://imgur.com/obRA9PO
Заранее спасибо..

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Заполнение ListView,используя свой адаптер на базе BaseA

Сообщение doter.ua » 03 ноя 2015, 14:21

ArrayList<Product> products, где инфа хранится в классе Product:
Product.name
Product.image
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

Ответить