Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
RedFraction
1 / 1 / 0
Регистрация: 14.04.2014
Сообщений: 39
#1

Customs adapter listView - Программирование Android

18.09.2014, 00:04. Просмотров 871. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Customs adapter listView (Программирование Android):

TabHost, ListView и custom Adapter - Программирование Android
Здравствуйте. В общем есть TabHost c 3 вкладками. При нажатии на вкладку ХЗ показаться данные в ListView, но у меня при нажатии на эту...

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

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

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

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

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

2
YuraAAA
1578 / 1319 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
18.09.2014, 10:37 #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.
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
Привет! Вот еще темы с ответами:

Свой Adapter в свой Adapter - Программирование Android
Здравствуйте! В общем вопрос такой: у меня должно получить список в списке. Как то так: 1 10$ картошка сникерс ...

Данные из SQlite в ListView, обработка события ListView - Программирование Android
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные int из БД. mList.setOnItemClickListener(new...

Adapter selector selected - Программирование Android
Пишу свой адаптер для списка. Для строк использую свой XML (устанавливаю в getView). Как подложку строки использую селектор для эфекта...

ListFragment вывод данных (adapter) - Программирование Android
Доброго дня! Я новичек в Android программировании. Попытался создать проект на основе шаблона NavigationDrawner и реализовал...


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

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

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