Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
RedFraction
1 / 1 / 0
Регистрация: 14.04.2014
Сообщений: 39
#1

Customs adapter listView

18.09.2014, 00:04. Просмотров 920. Ответов 2
Метки нет (Все метки)

http://pastebin.ru/0GvfxEO8 помогите написать адаптер под данный item для listView. Толи мозгов, толи опыта мало. Надо - реализовать onClickListnerById, реализовать добавление в listView с помощью ".add", либо как с обычным адаптером - подгрузкой целого массива. Заранее благодарен. С меня бутылка пива если вы живете неподалеку от м. Домодедовская. Ссылки на сторонние ресурсы не сувать, так как почти всё что там есть однотипно.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2014, 00:04
Ответы с готовыми решениями:

TabHost, ListView и custom Adapter
Здравствуйте. В общем есть TabHost c 3 вкладками. При нажатии на вкладку ХЗ...

Listview, adapter получение информации из нажатого элемента списка
Есть список, который заполняется из базы данных. Мне нужно через контекстное...

Ошибка The content of the adapter has changed but ListView did not receive a notification
Прошу помощи, т.к. уже не знаю, что делать. Наверное нахватает знаний. На...

ListView. После добавления кнопки перестал быть доступен сам ListView
Кастомизировал ListView с помощью нескольких TextView. Но после того, как...

Listview вывод данных и переход по нажатию на другой Listview SQLite
Доброго извините за название темы, долго не мог сформировать название, В общем...

2
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
18.09.2014, 10:37 #2
Лучший ответ Сообщение было отмечено RedFraction как решение

Решение

RedFraction, ничего сложного. Сначала сделаем свой абстрактный адаптер.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//Чтобы адаптер не был привязан к какому-то конкретному типу данных
//мы воспользуемся generic.
public abstract class CommonAdapter<T> extends BaseAdapter {
 
    protected LayoutInflater inflater;
    //Наше хранилище данных
    private List<T> data = new ArrayList<T>();
 
    protected CommonAdapter(Context context) {
        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
 
    public void setData(List<T> data) {
        setData(data, true);
    }
 
    public void setData(List<T> data, boolean clear) {
        if (clear) {
            this.data.clear();
        }
        this.data.addAll(data);
        notifyDataSetChanged();
    }
 
    public void removeData(T data) {
        if (data != null) {
            this.data.remove(data);
            notifyDataSetChanged();
        }
    }
 
    public void addData(List<T> data, boolean appendToBegin) {
        if (this.data == null) {
            this.data = new ArrayList<T>(data);
        } else {
            if (appendToBegin) {
                this.data.addAll(0, data);
            } else {
                this.data.addAll(data);
            }
        }
        notifyDataSetChanged();
    }
 
    @Override
    public int getCount() {
        return data != null ? data.size() : 0;
    }
 
    @Override
    public T getItem(int position) {
        return data != null && !data.isEmpty() ? data.get(position) : null;
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
 
}
Идём дальше. По Вашему коду попробуем создать модельку. Собственно это просто POJO.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import java.io.Serializable;
 
public class Product implements Serializable {
 
    private int id;
    private String productName;
    private double price;
    private int no;
    private int jps;
 
    public Product(int id, String productName, double price, int no, int jps) {
        this.id = id;
        this.productName = productName;
        this.price = price;
        this.no = no;
        this.jps = jps;
    }
 
    public Product() {
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getProductName() {
        return productName;
    }
 
    public void setProductName(String productName) {
        this.productName = productName;
    }
 
    public double getPrice() {
        return price;
    }
 
    public void setPrice(double price) {
        this.price = price;
    }
 
    public int getNo() {
        return no;
    }
 
    public void setNo(int no) {
        this.no = no;
    }
 
    public int getJps() {
        return jps;
    }
 
    public void setJps(int jps) {
        this.jps = jps;
    }
}
и теперь строим адаптер под эту модель.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class ProductAdapter extends CommonAdapter<Product> {
 
 
    protected ProductAdapter(Context context) {
        super(context);
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //Потом нужно будет добавить ViewHolder и переиспользовать второй аргумент чтобы небыло тормозов
        View rootView = inflater.inflate(R.layout.list_item, parent, false);
        Product product = getItem(position);
        TextView.class.cast(rootView.findViewById(R.id.tv_Product_shop)).setText(product.getProductName());
        //Ипользуем String.valueOf() так как передача int параметра будет восприниматься
        //как ссылка на strings.xml, а не как текст
        TextView.class.cast(rootView.findViewById(R.id.tv_Price_shop)).setText(String.valueOf(product.getPrice()));
        TextView.class.cast(rootView.findViewById(R.id.tv_no_shop)).setText(String.valueOf(product.getNo()));
        TextView.class.cast(rootView.findViewById(R.id.tv_JPS_shop)).setText(String.valueOf(product.getJps()));
        return rootView;
    }
}
Идём дальше. Чтобы реализовать onClick по элементу мы воспользуемся callback-ом.
Опишем интерфейс.

Java
1
2
3
4
5
public interface OnClickByObjectListener<T> {
    
    void onClick(T object);
    
}
и применим к адаптеру, чтобы он выглядел так.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class ProductAdapter extends CommonAdapter<Product> {
 
 
    private OnClickByObjectListener<Product> listener;
 
    public void setListener(OnClickByObjectListener<Product> listener) {
        this.listener = listener;
    }
 
    protected ProductAdapter(Context context) {
        super(context);
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //Потом нужно будет добавить ViewHolder и переиспользовать второй аргумент чтобы небыло тормозов
        View rootView = inflater.inflate(R.layout.list_item, parent, false);
        final Product product = getItem(position);
        rootView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listener != null) {
                    listener.onClick(product);
                }
            }
        });
        TextView.class.cast(rootView.findViewById(R.id.tv_Product_shop)).setText(product.getProductName());
        //Ипользуем String.valueOf() так как передача int параметра будет восприниматься
        //как ссылка на strings.xml, а не как текст
        TextView.class.cast(rootView.findViewById(R.id.tv_Price_shop)).setText(String.valueOf(product.getPrice()));
        TextView.class.cast(rootView.findViewById(R.id.tv_no_shop)).setText(String.valueOf(product.getNo()));
        TextView.class.cast(rootView.findViewById(R.id.tv_JPS_shop)).setText(String.valueOf(product.getJps()));
        return rootView;
    }
}
Ну собственно всё. Остаётся во фрагменте/активити сделать листу setAdapter. и у адаптера вызвать setData/addData.
2
RedFraction
1 / 1 / 0
Регистрация: 14.04.2014
Сообщений: 39
18.09.2014, 23:57  [ТС] #3
YuraAAA, Cпасибо огромное, не знаю как отблагодарить)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2014, 23:57

Данные из SQlite в ListView, обработка события ListView
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные...

Передача данных из ListView в другой Activity в ListView
Добрый день. Пытаюсь разобраться с передачей данных с ListView, но выходит что...

RecyclerView Adapter
Пример классического создания адаптера RecyclerView public class...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru