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

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

Войти
Регистрация
Восстановить пароль
 
AlexRu18
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 101
#1

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

05.10.2016, 23:11. Просмотров 237. Ответов 7
Метки нет (Все метки)

Есть контейнер для фрагментов (container), есть фрагмент (fragment), есть BaseAdapter и Product
Я хочу сделать адаптер из списка в котором есть картинка, 1\2 TextView и кнопка.
Код нашёл в гугле, но не что-то у меня с методом fillData() поладить не удаётся, в чём может быть причина? И есть ли реализации данной задачи попроще?

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
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
 
import java.util.ArrayList;
 
public class Fragment extends Fragment{
 
    ArrayList<Product> products = new ArrayList<Product>();
    ChoiseAdapter boxAdapter;
 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState){
        return inflater.inflate(R.layout.fragment, container, false);
 
        // создаем адаптер
        fillData();
        boxAdapter = new ChoiseAdapter(getContext(), products);
 
        // настраиваем список
        ListView lvMain = (ListView) container.findViewById(R.id.List);
        lvMain.setAdapter(boxAdapter);
    }
    // генерируем данные для адаптера
    void fillData() {
        for (int i = 1; i <= 20; i++) {
            products.add(new Product("Product " + i, i * 1000,
                    R.mipmap.header_logo));
        }
    }
}
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="horizontal">
    <ListView
        android:id="@+id/cyList"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1">
    </ListView>
 
</LinearLayout>
XML
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
 
    <LinearLayout
        android:id="@+id/cymLinearLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="horizontal">
 
        <ImageView
            android:id="@+id/ivImage"
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:scaleType="fitCenter"
            android:src="@mipmap/ic_launcher"
            android:background="@android:color/background_dark">
        </ImageView>
 
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
 
            <TextView
                android:id="@+id/tvDescr"
                android:layout_width="match_parent"
                android:layout_height="140dp"
                android:text=""
                android:textSize="20sp"
                android:background="@android:color/holo_blue_bright">
            </TextView>
 
            <Button
                android:id="@+id/chooseButton"
                android:text="@string/chooseButton"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@+id/tvDescr"
                android:layout_alignParentLeft="false"
                android:layout_alignParentStart="false"/>
 
        </RelativeLayout>
 
    </LinearLayout>
 
</LinearLayout>
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Product {
 
    String cyName;
    int price;
    int cyImage;
 
    Product(String _cyName, int _price, int _cyImage) {
        cyName = _cyName;
        price = _price;
        cyImage = _cyImage;
    }
 
}
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
62
63
64
65
66
67
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
 
import java.util.ArrayList;
 
 
public class ChoiseAdapter extends BaseAdapter {
 
    Context ctx;
    LayoutInflater lInflater;
    ArrayList<Product> objects;
 
    ChoiseAdapter(Context contex, ArrayList<Product> products) {
        ctx = contex;
        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);
    }
 
    // id по позиции
    @Override
    public long getItemId(int position) {
        return position;
    }
 
    // пункт списка
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // используем созданные, но не используемые view
        View view = convertView;
        if (view == null) {
            view = lInflater.inflate(R.layout.cy_item, parent, false);
        }
 
        Product p = getProduct(position);
 
        // заполняем View в пункте списка данными из товаров: наименование
        // и картинка
        ((TextView) view.findViewById(R.id.tvDescr)).setText(p.cyName);
        ((ImageView) view.findViewById(R.id.ivImage)).setImageResource(p.cyImage);
 
        return view;
    }
 
    // товар по позиции
    Product getProduct(int position) {
        return ((Product) getItem(position));
    }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2016, 23:11     BaseAdapter
Посмотрите здесь:

BaseAdapter - Программирование Android
Доброго времени суток Есть класс адаптера скопированный с http://idev.by/android/311/ Код: package ru.myscanner.scannerth; ...

Не понятное поведение BaseAdapter - Программирование Android
Добрый день! Проблема в следующем: есть ListView, есть адаптер унаследованный от BaseAdapter. В адаптере в методе getView загружаю...

Не вижу абстрактных методов в классе BaseAdapter - Программирование Android
Когда создаю свой класс, наследующий BaseAdapter, требуется реализовать 4 абстрактных метода: getCount(), getItem(), getItemId, getView....

Изменение данных через BaseAdapter в Activity - Программирование Android
Добрый день, у меня возникла следующая проблема. У меня имеется стандартное активити с listview и в этом же активити сверху имеется text...

Как вывести в BaseAdapter картинки, занесенные в таблицу? - Программирование Android
Всем привет! Подскажите пожалуйста, как вывести в BaseAdapter картинки которые я занес в таблицу @Override public View...

При клики в BaseAdapter меняется массив строк, как пересоздать ListView с новым массивом? - Программирование Android
Здравствуйте! Имеется класс: package ru.contedevel.mathworker; import java.util.ArrayList; import...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OlegJV
102 / 102 / 29
Регистрация: 13.03.2016
Сообщений: 471
05.10.2016, 23:58     BaseAdapter #2
"не удается поладить" это очень содержательно, подробнейше описывает все ошибки. Сразу все понятно становится.

Добавлено через 1 минуту
опять любитель R.id в массив совать
AlexRu18
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 101
06.10.2016, 00:35  [ТС]     BaseAdapter #3
я делал по данной штуке
на fillData выскакивает Unreachable statement
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
06.10.2016, 08:47     BaseAdapter #4
Цитата Сообщение от AlexRu18 Посмотреть сообщение
на fillData выскакивает Unreachable statement
Скрин лога скиньте.
fraley
103 / 103 / 37
Регистрация: 24.05.2015
Сообщений: 313
06.10.2016, 09:17     BaseAdapter #5
Лень проверять в AS... в фрагменте, функция onCreateView - вы возвращает view(строка 17) и... после этого у вас есть код.
Как он будет выполняться?
Функция onCreateView должна выглядеть примерно так и это при условие что я не в вникал в остальную логику:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState){
        View view= inflater.inflate(R.layout.fragment, container, false);
  // создаем адаптер
        fillData();
        boxAdapter = new ChoiseAdapter(getContext(), products);
 
        // настраиваем список
        ListView lvMain = (ListView) container.findViewById(R.id.List);
        lvMain.setAdapter(boxAdapter);
       return view;
      
    }
AlexRu18
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 101
06.10.2016, 14:33  [ТС]     BaseAdapter #6
Спасибо большое, добрый человек. Теперь понял где у меня пробел в знании фрагментов.

Приложение стало компилироваться и теперь ошибка выглядит вот так:
ругается на lvMain.setAdapter(boxAdapter);

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
FATAL EXCEPTION: main
                                                   Process: ru.alexsuvorov.paiste, PID: 15513
                                                   java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
                                                       at ru.alexsuvorov.paiste.CymbalsFragment.onCreateView(CymbalsFragment.java:27)
                                                       at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080)
                                                       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108)
                                                       at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1290)
                                                       at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:801)
                                                       at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1677)
                                                       at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:536)
                                                       at android.os.Handler.handleCallback(Handler.java:739)
                                                       at android.os.Handler.dispatchMessage(Handler.java:95)
                                                       at android.os.Looper.loop(Looper.java:224)
                                                       at android.app.ActivityThread.main(ActivityThread.java:5526)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Pablito
2416 / 1861 / 583
Регистрация: 12.05.2014
Сообщений: 6,596
Завершенные тесты: 1
06.10.2016, 15:00     BaseAdapter #7
Java
1
ListView lvMain = (ListView) container.findViewById(R.id.List);
а почему тут container а не view ?

Добавлено через 1 минуту

Не по теме:

о боже, у него картинки в mipmap лежат

AlexRu18
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 101
06.10.2016, 15:11  [ТС]     BaseAdapter #8
Всё дело в том, что я использую NavDrawer и там у меня есть RelativeLayout с id=container
И в него загружаю фрагменты.

Таким образом тут я обращаюсь к контейнеру и ищ
Java
1
container.findViewById(R.id.List);

Понял что было не так. Сделал так и вроде как пошла:
Java
1
        ListView lvMain = (ListView) view.findViewById(R.id.cymbalsList);

Не по теме:

В mipmap картинка лежит для теста. Как будто когда вы начинали, вы не делали глупых ошибок, разных тестов и экспериментов с кодом

Yandex
Объявления
06.10.2016, 15:11     BaseAdapter
Ответ Создать тему
Опции темы

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