Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Добрыня21
0 / 0 / 0
Регистрация: 06.02.2016
Сообщений: 6
1

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

06.02.2016, 23:12. Просмотров 549. Ответов 9
Метки нет (Все метки)

Добрый день.
Создаю прокручиваемый список, в каждом поле четыре строки, проблема в написании кода. Создал в ресурсе strings четыре массива string-array, и хочу что бы программа брала данные оттуда. Свою разметку создал, адаптер также описал, но не понимаю как обратиться непосредственно к строковым ресурсам для заполнения ListView. Поэтому сейчас вынужден использовать следующий вариант:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class SpisokActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_spisok);
 
        ListView lv;
        ArrayList<Item> data = new ArrayList<Item>();
 
            data.add(new Item("Строка1","Строка2","Строка3","Строка4"));
            lv = (ListView) this.findViewById(R.id.list);
            lv.setAdapter(new MyAdapter(this,data));
        }
}
Хотелось бы того же изящества как с однострочным списком, когда я обращался непосредственно к string-array:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_spisok);
 
        // набор данных, которые свяжем со списком
        final String[] verbs = getResources().getStringArray(
                R.array.v1);
        // получаем элемент ListView
        ListView countriesList = (ListView) findViewById(R.id.list);
 
        // создаем адаптер
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, verbs);
 
        // устанавливаем для списка адаптер
        countriesList.setAdapter(adapter);
    }
}
Подскажите, как обратиться к строковым ресурсам так же как во втором примере, а не вставлять данные прямо в код?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2016, 23:12
Ответы с готовыми решениями:

Кастомизация ListView
http://imglink.ru/pictures/15-06-14/3d97212a44f93f016eb14cfbf868d023.jpg Как...

Кастомизация ListView
Добрый день. Перерыл пол инета но так и не нашел нормальный мануал как можно...

Кастомизация ListView и использование Sticky Header
Использую библиотеку https://github.com/beworker/pinned-section-listview И...

Кастомизация индикатора прокрутки в ListView Android Studio
Здравствуйте, вообщем прописал нужные свойства для своего отображения прокрутки...

Кастомизация Spinner
Пытаюсь изменить внешний вид spinner Сделал для него стиль вида &lt;style...

9
JavaStarter
11 / 11 / 4
Регистрация: 14.05.2015
Сообщений: 52
07.02.2016, 00:15 2
Java
1
2
3
final ArrayAdapter<CharSequence> adapter =
 ArrayAdapter.createFromResource(getActivity(), getResources().getStringArray(R.array.string_array), R.layout.list_row);
lv.setAdapter(adapter);
0
Добрыня21
0 / 0 / 0
Регистрация: 06.02.2016
Сообщений: 6
07.02.2016, 14:12  [ТС] 3
Спасибо за совет. Сделал так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_spisok);
 
            ListView lv;
            final ArrayAdapter<CharSequence> adapter =
                    ArrayAdapter.createFromResource(getActivity(), getResources().getStringArray(R.array.v1), // <---
                            getResources().getStringArray(R.array.v2),
                            getResources().getStringArray(R.array.v3),getResources().getStringArray(R.array.rus_word),
                            R.layout.list_item);
            lv = (ListView) this.findViewById(R.id.list);
            lv.setAdapter(adapter);
        }
}
Не могу разобраться что делать с getActivity. Пробовал поменять на this, не помогает.

Добавлено через 31 минуту
И еще вопрос. Где при такой реализации привязка к созданному мной адптеру MyAdapter?
0
JavaStarter
11 / 11 / 4
Регистрация: 14.05.2015
Сообщений: 52
07.02.2016, 18:39 4
Попробуйте так:

Java
1
2
3
4
5
6
7
ListView listView = (ListView) findViewById(R.id.listView);
 
        String [] fillist= getResources().getStringArray(R.array.array);
 
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1, fillist);
 
        listView.setAdapter(adapter);//привязка адаптера к listview
0
Добрыня21
0 / 0 / 0
Регистрация: 06.02.2016
Сообщений: 6
09.02.2016, 21:14  [ТС] 5
Спасибо за ответ, но этот вариант так же не подходит под мою задачу. Ладно, не беда. Реализую свой первый вариант без привлечения ресурсов из strings.
0
Добрыня21
0 / 0 / 0
Регистрация: 06.02.2016
Сообщений: 6
16.02.2016, 21:47  [ТС] 6
Здравствуйте, у меня ещё один вопрос:
Изначально мой код активности выглядел таким образом:
public class SpisokActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spisok);

ListView lv;
ArrayList data = new ArrayList();

data.add(new Item(«1», «2», «3», «4»));
data.add(new Item(«5», «6», «7», «8»));
lv = (ListView) this.findViewById(R.id.list);
lv.setAdapter(new MyAdapter(this, data));
}
}
Код рабочий, но встал вопрос с отработкой нажатия, тогда я написал вот так:
public class SpisokActivity extends android.app.ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spisok);

ListView lv;
ArrayList data = new ArrayList();

data.add(new Item(«1», «2», «3», «4»));
data.add(new Item(«5», «6», «7», «8»));
lv = (ListView) this.findViewById(R.id.list);
lv.setAdapter(new MyAdapter(this, data));
}
// Обработка нажатия
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
}
}
То есть, что бы добавить метод onListItemClick я изменил активность AppCompatActivity на android.app.ListActivity. Ошибки в коде AndroidStudio не выдает, на телефон и эмулятор программа устанавливается, но при попытке обратиться к данной активности программа вылетает. Уж голову сломал, а решение не дается. Возможно не учитываю какую-либо досадную мелочь. Подскажите пожалуйста, может кто сталкивался с такой проблемой? Причем если работать с однострочным ListView такой проблемы нет, возможно это как-то связано с применением ArrayList.
0
JavaStarter
11 / 11 / 4
Регистрация: 14.05.2015
Сообщений: 52
17.02.2016, 18:10 7
Не виден код ошибки, но вылетает скорее всего потому, что при имплементации в разметке ListActivity для ListView нужно указать:
XML
1
android:id="@android:id/list"
После этого уже не нужно в самой активити ссылаться на этот ListView, то есть не нужно дописывать lv = (ListView) this.findViewById(R.id.list); Андроид автоматически определяет: если есть ListActivity, значит есть ListView c id = "@android:id/list".
1
Добрыня21
0 / 0 / 0
Регистрация: 06.02.2016
Сообщений: 6
18.02.2016, 15:23  [ТС] 8
Но если я не укажу lv = (ListView) this.findViewById(R.id.list), то как мне запустить адаптер lv.setAdapter(new MyAdapter(this, data));? Попробовал тогда прописать так: lv = (ListView) this.findViewById(R.layout.activity_spisok);, ругается зараза.
0
JavaStarter
11 / 11 / 4
Регистрация: 14.05.2015
Сообщений: 52
18.02.2016, 18:13 9
Просто setListAdapter(new MyAdapter(this, data));
0
Добрыня21
0 / 0 / 0
Регистрация: 06.02.2016
Сообщений: 6
18.02.2016, 18:29  [ТС] 10
Я уже сам разобрался что нужно применить setListAdapter, поменял и всё заработало должным образом. JavaStarter, спасибо за советы, реально помогло.
0
18.02.2016, 18:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2016, 18:29

Кастомизация SeekBar?
Добрый день! нужно кастомизировать seekbar, знаю (видел) много примеров, но...

Кастомизация списков
В инете есть множество примеров изменение внешнего вида ListView с помощью...

Кастомизация заголовока окна
Лайауты имеют белый фон и тему по-умолчанию. На версии 4.1 заголовки окон не...


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

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

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