Урок 42. Список - ListView

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 42. Список - ListView

Сообщение damager82 » 15 дек 2011, 03:00

В этом уроке:

- используем ListView для построения списка

Click here to read this article!
Последний раз редактировалось damager82 02 май 2017, 23:32, всего редактировалось 4 раза.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Eventmaker
Сообщения: 1
Зарегистрирован: 24 фев 2012, 16:08

Re: Урок 42. Список - ListView

Сообщение Eventmaker » 24 фев 2012, 16:24

Здравствуйте, подскажите, пожалуйста, как можно поменять цвет текста, в зависимости от значения этого текста?
То есть, например, в вашем уроке, имя "Даша" сделать красным, а все остальное зеленым...


...через 5 часов:

Почитал уроки, решил использовать SimpleAdapter...

п.с. Большое Человеческое Спасибо за материал!!!

яфпкк
Сообщения: 8
Зарегистрирован: 21 фев 2012, 05:59

Re: Урок 42. Список - ListView

Сообщение яфпкк » 03 мар 2012, 13:43

Возможно ли спроектировать интерфейс так, чтобы ПОД ListView в самом низу экрана можно было нарисовать что-нибудь еще, например, button.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK"
android:layout_weight="1" />
</LinearLayout>

При любом значении параметров layout_height у ListView и Button первый всегда занимает весь экран до низу, в итоге кнопку не видно.
Возможно ли сделать то, что мне нужно (естественно использования жестко заданной высоты ListView (а-ля layout_height="100 dp") не допускается)??

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 42. Список - ListView

Сообщение damager82 » 05 мар 2012, 10:28

Так вроде то, что нужно получается.

Код: Выделить всё

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" >
    </ListView>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="OK" />

</LinearLayout>
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

яфпкк
Сообщения: 8
Зарегистрирован: 21 фев 2012, 05:59

Re: Урок 42. Список - ListView

Сообщение яфпкк » 06 мар 2012, 07:21

damager82 писал(а):Так вроде то, что нужно получается.
таки да, после того как у списка указываешь вес = 1 получается то, что нужно, не очевидно однако.
спасибо за помощь

Volk65
Сообщения: 1
Зарегистрирован: 01 июн 2012, 19:41

Re: Урок 42. Список - ListView

Сообщение Volk65 » 26 июн 2012, 14:02

День добрый!

Пробую открыть двойным кликом simple_list_item_1.xml

Выдает такую ошибку:
Could not open the editor: Android XML Editor cannot process this input.


P.S. Спасибо за уроки.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 42. Список - ListView

Сообщение damager82 » 29 июн 2012, 15:22

Volk65 писал(а):Пробую открыть двойным кликом simple_list_item_1.xml

Выдает такую ошибку:
Could not open the editor: Android XML Editor cannot process this input.
Похоже, что это баг, который пришел с какой-то новой версией Eclipse или ADT. У меня сейчас тоже не открывается и выдает такую ошибку.
Если очень надо, то можно этот файл через поиск найти в папке android-sdk-windows/platforms
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 42. Список - ListView

Сообщение damager82 » 29 июн 2012, 15:22

damager82 писал(а):
Volk65 писал(а):Пробую открыть двойным кликом simple_list_item_1.xml

Выдает такую ошибку:
Could not open the editor: Android XML Editor cannot process this input.
Похоже, что это баг, который пришел с какой-то новой версией Eclipse или ADT. У меня сейчас тоже не открывается и выдает такую ошибку.
Если очень надо, то можно этот файл через поиск найти в файловой системе компа, в папке android-sdk-windows/platforms
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 42. Список - ListView

Сообщение AndreyI » 29 июн 2012, 17:05

damager82 писал(а):
Похоже, что это баг, который пришел с какой-то новой версией Eclipse или ADT. У меня сейчас тоже не открывается и выдает такую ошибку.
Если очень надо, то можно этот файл через поиск найти в папке android-sdk-windows/platforms
Это скорее недоработка чем баг, там не текстовый xml , а двоичный, так же как и вся библиотека android.jar.
Тут нужен специальный плагин для эклипса чтобы он умел читать двоичные xml.
Например, вот этот https://adt-addons.googlecode.com/svn/t ... it.update/

Alexei
Сообщения: 6
Зарегистрирован: 28 июн 2012, 16:51

Re: Урок 42. Список - ListView

Сообщение Alexei » 11 июл 2012, 13:30

яфпкк писал(а):
damager82 писал(а):Так вроде то, что нужно получается.
таки да, после того как у списка указываешь вес = 1 получается то, что нужно, не очевидно однако.
спасибо за помощь
Здравствуйте.
По своей лености слепил этот и предыдущий урок в одном проекте(создал несколько функций и просто вызывал их по очереди)
main.xml стал выглядеть так

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	 xmlns:android="http://schemas.android.com/apk/res/android"
	 android:layout_width="fill_parent"
	 android:layout_height="fill_parent"
	 android:orientation="vertical">
	<TextView
		 android:layout_width="wrap_content"
		 android:layout_height="wrap_content"
		 android:text="Staff list"
		 android:layout_gravity="center_horizontal">
	</TextView>
	<ScrollView
		 android:layout_width="fill_parent"
		 android:layout_height="fill_parent"
		 android:id="@+id/scroll">
		<LinearLayout
			 android:id="@+id/linLayout"
			 android:layout_width="fill_parent"
			 android:layout_height="fill_parent"
			 android:orientation="vertical">
		</LinearLayout>
	</ScrollView>
	
	<ListView
		 android:id="@+id/lvMain"
		 android:layout_width="match_parent"
		 android:layout_height="wrap_content">
	</ListView>
</LinearLayout>
В итоге, если вызывал функции из урока 42, то видел пустой экран.
Установка android:layout_weight="1" для ScrollView помогла, но пришлось попариться(пока на форум не залез)
Действительно не очень очевыдный нюанс.

diron
Сообщения: 2
Зарегистрирован: 17 июн 2012, 09:43

Re: Урок 42. Список - ListView

Сообщение diron » 15 июл 2012, 07:20

подскажите, пожалуйста, а как правильно подключить данный плагин? Я его установил для эклипса, но ничего не изменилось. Как выдавалась ошибка при попытке открыть файл XML, так и выдается.

AndreyI
Сообщения: 372
Зарегистрирован: 14 май 2012, 16:18

Re: Урок 42. Список - ListView

Сообщение AndreyI » 15 июл 2012, 11:01

diron писал(а):подскажите, пожалуйста, а как правильно подключить данный плагин? Я его установил для эклипса, но ничего не изменилось. Как выдавалась ошибка при попытке открыть файл XML, так и выдается.
Window->General->Editors->File Associations ставим для *.xml двоичный редактор как Default

3Gern
Сообщения: 25
Зарегистрирован: 30 июл 2012, 13:32

Re: Урок 42. Список - ListView

Сообщение 3Gern » 03 авг 2012, 17:03

можно ли содержимое тхт файла вывести в списке ListView?

k.chaiko
Сообщения: 21
Зарегистрирован: 02 авг 2012, 17:23

Re: Урок 42. Список - ListView

Сообщение k.chaiko » 03 авг 2012, 17:23

3Gern писал(а):можно ли содержимое тхт файла вывести в списке ListView?
Конечно, в Android есть стандартные классы чтения/записи потоков(InputStreamReader например), ими можно легко считать текстовый файл, главное потом его правильно распарсить и выделить элементы и собрать их в коллекцию, а дальше уже заполнить ListView

3Gern
Сообщения: 25
Зарегистрирован: 30 июл 2012, 13:32

Re: Урок 42. Список - ListView

Сообщение 3Gern » 03 авг 2012, 18:15

k.chaiko со считыванием все получилось, а вот про распарсит не понял и не знаю как сделать, можете примеры с ней дать или помочь с кодом? ниже код для чтения файла

Код: Выделить всё

ListView spisok = (ListView)findViewById(R.id.listView1);
        String myText = null;
       
        InputStream inputStream = getResources().openRawResource(R.raw.qwer);
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        int i;
        
        try {
        	i = inputStream.read();
        while (i != -1) { 
        	byteArrayOutputStream.write(i);  
        	i = inputStream.read();   
        }
        inputStream.close();
        myText = byteArrayOutputStream.toString("UTF-8");
        
        }
        catch (IOException e) 
        {}

k.chaiko
Сообщения: 21
Зарегистрирован: 02 авг 2012, 17:23

Re: Урок 42. Список - ListView

Сообщение k.chaiko » 03 авг 2012, 18:22

3Gern писал(а):k.chaiko со считыванием все получилось, а вот про распарсит не понял и не знаю как сделать, можете примеры с ней дать или помочь с кодом? ниже код для чтения файла
Тогда напишите как у вас в txt расположены элементы списка, я думаю каждый элемент просто с новой строки, сейчас напишу примерно, как сделать..

Код: Выделить всё

public List<String> createListFromFile(int idFile) {
        BufferedReader inputStream = null;
        try {
            inputStream = new BufferedReader(new InputStreamReader(getResources().openRawResource(idFile)));
            List<String> list = new ArrayList<String>();
            String strLine;
            while ((strLine = inputStream.readLine()) != null) {
                list.add(strLine);
            }
            return list;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
P.S. вот накидал метод, возвращает вам коллекцию, из вашего текст файла, в метод передавайте id файла, и всё, ну и List<String> заполняете уже ListView..
Метод readLine считывает файл построчно, если элементы идут к примеру через запятую, то парсить сложнее, мой метод работает если элементы каждый раз с новой строки..

3Gern
Сообщения: 25
Зарегистрирован: 30 июл 2012, 13:32

Re: Урок 42. Список - ListView

Сообщение 3Gern » 03 авг 2012, 19:24

k.chaiko писал(а):P.S. вот накидал метод, возвращает вам коллекцию, из вашего текст файла, в метод передавайте id файла, и всё, ну и List<String> заполняете уже ListView..
Метод readLine считывает файл построчно, если элементы идут к примеру через запятую, то парсить сложнее, мой метод работает если элементы каждый раз с новой строки..
спасибо вам, попробую все это дело вместе соединить.

3Gern
Сообщения: 25
Зарегистрирован: 30 июл 2012, 13:32

Re: Урок 42. Список - ListView

Сообщение 3Gern » 03 авг 2012, 19:39

k.chaiko
все получилось, огромное вас спс!!!

v_grechka
Сообщения: 20
Зарегистрирован: 09 авг 2012, 13:30

Re: Урок 42. Список - ListView

Сообщение v_grechka » 15 авг 2012, 09:42

есть файл разметки, целью которого есть вывести список, состоящий из 3-х TextEdit с возможностью СинглСелекта.

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <CheckedTextView 
    android:id="@android:id/text1"
    android:layout_width="wrap_content"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:gravity="center"
    android:checkMark="?android:attr/textCheckMark"
    android:text="CheckedTextView"
    android:paddingLeft="6dip"
    android:paddingRight="6dip"
    
/>
    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/Text2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:layout_marginRight="20dp"
            android:text="TextView" >
        </TextView>

        <TextView 
            android:id="@+id/Text3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:layout_marginRight="20dp"
            android:text="TextView"
        />
    </LinearLayout>

   </LinearLayout>

Если поглядеть визуальное представление этого файла действительно отображается 1 CheckedTextView и рядом 2 TextView.
Если запустить приложение, то на эмуляторе отображается ТОЛЬКО CheckedTextView. TextView не видно.
Правда в качесте адаптера используется

Код: Выделить всё

adapt = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_checked, catnames_jar);
если при создании адаптера использовать мой файл
adapt = new ArrayAdapter<String>(this,R.layout.list_item, catnames_jar); вываливается ошибка 08-15 07:01:16.763: E/AndroidRuntime(1370): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
Кто-нить сталкивался с таким. М.б. есть ссылки на примеры посторения сложных ListView?
И еще вопрос. Можно ли расположить "чек" слева, а не справа?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 42. Список - ListView

Сообщение rezak90 » 15 авг 2012, 10:24

на счёт сложности то ничем они не отличаются, вся магия происходит в адаптере, что ты там накодишь то и будет отображаться, так что у меня предчувствие что там не всё впорядке. На счёт чекбокса, хз как, разве что есть два варианта: 1) выбрать чекбокс а не чек CheckedTextView ; 2) если первый вариант не подходит то попробовать реализовать кастомный CheckedTextView, а там все карты в руки.
R.id.team
Политика на форуме запрещена

Ответить