Форум программистов, компьютерный форум CyberForum.ru

Customs adapter listView - Android

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

Android ListView
Переход из Listview в Listview Android
TabHost, ListView и custom Adapter Android
Adapter selector selected Android
Пустой список после вызова adapter.notifyDataSetChanged Android
Ошибка The content of the adapter has changed but ListView did not receive a notification Android
Android Свой Adapter в свой Adapter
RecyclerView и java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder adapter pos Android
Android Listview в listview
Android ViewPager, adapter. Вывод картинки из массива ссылок
Android Crash Activity при присвоении ItemList-у Adapter-a
Android RecyclerView.Adapter загрузка изображения

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
18.09.2014, 10:37     Customs adapter listView #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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.
RedFraction
 Аватар для RedFraction
1 / 1 / 0
Регистрация: 14.04.2014
Сообщений: 38
18.09.2014, 23:57  [ТС]     Customs adapter listView #3
YuraAAA, Cпасибо огромное, не знаю как отблагодарить)
Yandex
Объявления
18.09.2014, 23:57     Customs adapter listView
Ответ Создать тему
Опции темы

Текущее время: 00:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru