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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
#1

Кастомизация ListView - Android

09.01.2014, 22:46. Просмотров 1993. Ответов 10
Метки нет (Все метки)

Добрый день.
Перерыл пол инета но так и не нашел нормальный мануал как можно скастомизировать ListView. Прошу не ругаться, реально не смог найти рабочий вариант.
Есть у меня String title и String Text.
Нужно просто вывести их в ListView у которой в item 2 TextView .
Задаче по идее не сложная, но вот нормального решения для новичка найти не могу.
Прошу помощи!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 420
09.01.2014, 23:06     Кастомизация ListView #2
Нормальный пример: http://startandroid.ru/ru/uroki/vse-...j-adapter.html
korsaj
148 / 117 / 9
Регистрация: 16.08.2013
Сообщений: 508
09.01.2014, 23:35     Кастомизация ListView #3
Изучение данного вопроса, я бы посоветовал начать с этого урока http://startandroid.ru/ru/uroki/vse-...ja-spiska.html
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
10.01.2014, 16:10  [ТС]     Кастомизация ListView #4
Спс! Хоть это и немножко другое.
YuraAAA
1565 / 1307 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
10.01.2014, 17:15     Кастомизация ListView #5
VictorAkira, Нет ничего проще

1. Создаём класс обёртку, чтобы было удобно работать с двумя текстовыми объектами, это нам поможет дальше:

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
public class StringWrapper {
     private String mTitle;
     private String mText;
 
    public StringWrapper(String mTitle, String mText) {
        this.mTitle = mTitle;
        this.mText = mText;
    }
 
    public StringWrapper() {
    }
 
    public String getTitle() {
        return mTitle;
    }
 
    public void setTitle(String mTitle) {
        this.mTitle = mTitle;
    }
 
    public String getText() {
        return mText;
    }
 
    public void setText(String mText) {
        this.mText = mText;
    }
}
2. Не будем пользоваться уже готовыми адаптерами, напишем свой (для адаптера понадобится layout)

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
public class CustomAdapter extends BaseAdapter {
 
    private List<StringWrapper> data = new ArrayList<StringWrapper>();  //Наша коллекция
    private LayoutInflater inflater;
 
    public CustomAdapter(Context mContext) {
        inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //Инфлейтер чтобы получить View из XML
    }
 
    public void setData(List<StringWrapper> data) {
        this.data = data;
    }
 
    @Override
    public int getCount() {
        return data.size();
    }
 
    @Override
    public StringWrapper getItem(int i) {
        return data.get(i);
    }
 
    @Override
    public long getItemId(int i) {
        return i;
    }
 
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        view = inflater.inflate(R.layout.simplt_list_item, null);
        StringWrapper currentItem = getItem(i);
        TextView.class.cast(view.findViewById(R.id.txt_text)).setText(currentItem.getText());
        TextView.class.cast(view.findViewById(R.id.txt_title)).setText(currentItem.getTitle());
        return view;
    }
 
}
и простейший layout (simple_list_item.xml)
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
 
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/txt_title"/>
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/txt_text"/>
</LinearLayout>
3. Всё, теперь можно использовать всю эту кашу. Кинем listview на активити:

main.xml

XML
1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <ListView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/mylist"/>
</LinearLayout>
сама активити:

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
public class MyActivity extends Activity {
 
    private ListView listView;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        listView = (ListView) findViewById(R.id.mylist);
        initData();
    }
 
    void initData() {
        CustomAdapter customAdapter = new CustomAdapter(this);
        List<StringWrapper> wrapperList = new ArrayList<StringWrapper>();
        wrapperList.add(new StringWrapper("Title1", "Text1"));
        wrapperList.add(new StringWrapper("Title2", "Text2"));
        wrapperList.add(new StringWrapper("Title3", "Text3"));
        wrapperList.add(new StringWrapper("Title4", "Text4"));
        wrapperList.add(new StringWrapper("Title5", "Text5"));
        customAdapter.setData(wrapperList);
        listView.setAdapter(customAdapter);
        customAdapter.notifyDataSetChanged();
    }
 
}
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
11.01.2014, 10:33  [ТС]     Кастомизация ListView #6
Спасибо!!!!
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
30.01.2014, 12:17  [ТС]     Кастомизация ListView #7
Появился Вопрос!
Есть обычное листвью.
Java
1
2
3
4
ListView viewActionsList = (ListView) findViewById(R.id.actions);
String[] values = new String[] {"Мировые новости", "Новости Ватикана", "Новости России","Новости стран СНГ", "Христианские новости", "О нас"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.main_list_item, R.id.product_name, values);
viewActionsList.setAdapter(adapter);
за отображение отвечает обычное текствью.
Как мне поменять фон любого элемента в этом ListView?
Фон должен быть #444756.
То есть к примеру мне надо задать фон 3го элемента.
Как это сделать?
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 420
30.01.2014, 15:56     Кастомизация ListView #8
Цитата Сообщение от VictorAkira Посмотреть сообщение
Появился Вопрос!
Есть обычное листвью.
Java
1
2
3
4
ListView viewActionsList = (ListView) findViewById(R.id.actions);
String[] values = new String[] {"Мировые новости", "Новости Ватикана", "Новости России","Новости стран СНГ", "Христианские новости", "О нас"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.main_list_item, R.id.product_name, values);
viewActionsList.setAdapter(adapter);
за отображение отвечает обычное текствью.
Как мне поменять фон любого элемента в этом ListView?
Фон должен быть #444756.
То есть к примеру мне надо задать фон 3го элемента.
Как это сделать?
Так?
Java
1
TextView1.setBackgroundColor(0x88444756);
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
30.01.2014, 16:12  [ТС]     Кастомизация ListView #9
Я так понимаю 0x88444756 это код цвета в 16ти или 8-чной системе. Это #444756?
У меня есть лист. И мне надо задать любому элементу данный бекграунд.
Я так понимаю это как-то надо пройтись циклом по adapter'у или ListView, узнать номер позиции и задать цвет. Как это сделать?
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 420
30.01.2014, 16:21     Кастомизация ListView #10
Цитата Сообщение от VictorAkira Посмотреть сообщение
Я так понимаю 0x88444756 это код цвета в 16ти или 8-чной системе. Это #444756?
Да. Впереди 88 вроде как отвечает за непрозрачность.

Цитата Сообщение от VictorAkira Посмотреть сообщение
У меня есть лист. И мне надо задать любому элементу данный бекграунд.
Я так понимаю это как-то надо пройтись циклом по adapter'у или ListView, узнать номер позиции и задать цвет. Как это сделать?
Я почему-то решил, что ваш кастомный ListView заполняется в цикле. Тогда легко можно было бы установить цвет TextView.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2014, 18:42     Кастомизация ListView
Еще ссылки по теме:

Кастомизация ListView и использование Sticky Header Android
Кастомизация стандартных вьювов - плагиат или нет? Android
Android Кастомизация ListView
Данные из SQlite в ListView, обработка события ListView Android
Кастомизация прогресс-бара Android

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

Или воспользуйтесь поиском по форуму:
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
30.01.2014, 18:42  [ТС]     Кастомизация ListView #11
Он не кастомный) Мне только нужна необходимость менять цвет беграунда.
Я написал как он создается:
Java
1
2
3
String[] values = new String[] {"Мировые новости", "Новости Ватикана", "Новости России","Новости стран СНГ", "Христианские новости", "О нас"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.main_list_item, R.id.product_name, values);
viewActionsList.setAdapter(adapter)
Просто в активити приходит переменная с номером элемента, согласно этого должен изменится цвет элемента с данным номером.
Yandex
Объявления
30.01.2014, 18:42     Кастомизация ListView
Ответ Создать тему
Опции темы

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