Урок 41. Используем LayoutInflater для создания списка
Урок 41. Используем LayoutInflater для создания списка
Последний раз редактировалось damager82 02 май 2017, 23:32, всего редактировалось 5 раз.
Re: Урок 41. Используем LayoutInflater для создания списка
Я не очень поняла следующий момент в уроке.
Мы создали множество объектов View из xml item.xml.
у них есть идентификаторы tvName ,tvPosition и т.д.
И мы потом все эти объекты присоединили к 1 layout - linLayout.
Как такое возможно? Те в этом лайоуте несколько элементов с одинаковыми id?
Спасибо.
Мы создали множество объектов View из xml item.xml.
у них есть идентификаторы tvName ,tvPosition и т.д.
И мы потом все эти объекты присоединили к 1 layout - linLayout.
Как такое возможно? Те в этом лайоуте несколько элементов с одинаковыми id?
Спасибо.
Re: Урок 41. Используем LayoutInflater для создания списка
id уникален, так сказать, в пределах item.xml
Re: Урок 41. Используем LayoutInflater для создания списка
Вы можете проверить и сами создать руками такой layout в редакторе.marmota писал(а): Как такое возможно? Те в этом лайоуте несколько элементов с одинаковыми id?
Киньте туда два TextView и дайте им одинаковый id. Он ругнется желтым цветом, что дублируется, но приложение запустит без проблем.
А findViewById будет находить первый из двух.
Re: Урок 41. Используем LayoutInflater для создания списка
Пробовала. Если в разных файлах разметки id одинаковые, то вообще даже и не ругнется...
Вобщем, странно, почему такого ограничения нет.
И значит, что я потом не смогу нужный мне из этих элементов вытащить через findViewById?
И еще я хотела уточнить - правильно ли я понимаю.
Вот мы в Activity указываем layout .
и он внутри себя создает кучу View, которые были описаны в my_layout.xml. Потом эти View я могу найти так
Но если я вызову метод findViewById, указав параметром какой-то id, который находится в другом файле разметки, то мне метод выдаст null?
А метод
ltInflater.inflate();
создает View на основе xml, который я могу потом приделать к текущей разметке и этот View будет находится методом findViewById.
Вобщем, странно, почему такого ограничения нет.
И значит, что я потом не смогу нужный мне из этих элементов вытащить через findViewById?
И еще я хотела уточнить - правильно ли я понимаю.
Вот мы в Activity указываем layout .
Код: Выделить всё
setContentView(R.layout.my_layout);
Код: Выделить всё
findViewById(R.id.my_view);
А метод
ltInflater.inflate();
создает View на основе xml, который я могу потом приделать к текущей разметке и этот View будет находится методом findViewById.
-
- Сообщения: 1
- Зарегистрирован: 10 май 2012, 16:56
Re: Урок 41. Используем LayoutInflater для создания списка
Большое спасибо за уроки, именно с них начал изучать программирование для Андроид. Небольшая поправочка по коду - вместо
int[] colors = new int[2];
...
colors[0] = Color.parseColor("#559966CC");
colors[1] = Color.parseColor("#55336699");
можно написать просто
int[] colors = { 0x559966CC, 0x55336699 };
int[] colors = new int[2];
...
colors[0] = Color.parseColor("#559966CC");
colors[1] = Color.parseColor("#55336699");
можно написать просто
int[] colors = { 0x559966CC, 0x55336699 };
Re: Урок 41. Используем LayoutInflater для создания списка
Как программно очистить такой layout? Это было бы полезно, если бы потребовалось обновить данные на странице без перезагрузки Activity. То есть это что-то вроде методов Clear() в C#.
Re: Урок 41. Используем LayoutInflater для создания списка
Есть такой метод - removeAllViews. В уроке 17 использую.Andy_NTG писал(а):Как программно очистить такой layout? Это было бы полезно, если бы потребовалось обновить данные на странице без перезагрузки Activity. То есть это что-то вроде методов Clear() в C#.
Re: Урок 41. Используем LayoutInflater для создания списка
А, вижу. Спасибо. Я пару книжек по Андроиду уже изучил, потому курс смотрю вразнобой. Даже после прочитанных книжек, тут есть что посмотреть, не говоря уже о том, что это неплохой справочный материал.
Re: Урок 41. Используем LayoutInflater для создания списка
Да я сам иногда в свои же уроки заглядываю подсмотреть чего-нить )Andy_NTG писал(а):А, вижу. Спасибо. Я пару книжек по Андроиду уже изучил, потому курс смотрю вразнобой. Даже после прочитанных книжек, тут есть что посмотреть, не говоря уже о том, что это неплохой справочный материал.
Re: Урок 41. Используем LayoutInflater для создания списка
Здравствуйте, подскажите есть вопрос про ScrollView
у меня как и написано в уроке в ScrollView лежит LinearLayout в который я загружаю элементы, заданные xml файликами. Работает все хорошо. Но мне нужно организовать прокрутку в конец, т.е. когда добавляешь элемент если он уже не помещается на экран, то прокручивать в конец.
Существует функция scrollTo(x,y), если её повешать на кнопку и нажимать кнопку то он все прокручивает, а если в засунуть в код после добавления элемента в список то не прокручивает..
или еще как-нибудь может быть можно это реализовать?
у меня как и написано в уроке в ScrollView лежит LinearLayout в который я загружаю элементы, заданные xml файликами. Работает все хорошо. Но мне нужно организовать прокрутку в конец, т.е. когда добавляешь элемент если он уже не помещается на экран, то прокручивать в конец.
Существует функция scrollTo(x,y), если её повешать на кнопку и нажимать кнопку то он все прокручивает, а если в засунуть в код после добавления элемента в список то не прокручивает..
или еще как-нибудь может быть можно это реализовать?
Re: Урок 41. Используем LayoutInflater для создания списка
все разобрался, сделал так
public void scrollDown()
{ scroll.post(new Runnable() {
public void run() {
scroll.scrollBy(0, +1500);
//scroll.fullScroll(ScrollView.FOCUS_DOWN);
}
});
}
public void scrollDown()
{ scroll.post(new Runnable() {
public void run() {
scroll.scrollBy(0, +1500);
//scroll.fullScroll(ScrollView.FOCUS_DOWN);
}
});
}
Re: Урок 41. Используем LayoutInflater для создания списка
Привет, почему у меня отображается на экране только первый элемент, хотя в логах показывает что прошло весь массив.
Re: Урок 41. Используем LayoutInflater для создания списка
Скиньте сюда код, если он отличен от урокаxottabut писал(а):Привет, почему у меня отображается на экране только первый элемент, хотя в логах показывает что прошло весь массив.
Re: Урок 41. Используем LayoutInflater для создания списка
код ничем не отличаетсяdamager82 писал(а):Скиньте сюда код, если он отличен от урокаxottabut писал(а):Привет, почему у меня отображается на экране только первый элемент, хотя в логах показывает что прошло весь массив.
Re: Урок 41. Используем LayoutInflater для создания списка
Спасибо, уже нашел ошибку)damager82 писал(а):Скиньте сюда код, если он отличен от урокаxottabut писал(а):Привет, почему у меня отображается на экране только первый элемент, хотя в логах показывает что прошло весь массив.
<LinearLayout
android:id="@+id/linLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
а надо
<LinearLayout
android:id="@+id/linLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
</LinearLayout>
получается в первом варианте список был горизонтальный и я его не видел.
Re: Урок 41. Используем LayoutInflater для создания списка
Как узнать по какому элементу списка кликнули?
Re: Урок 41. Используем LayoutInflater для создания списка
romanzi писал(а):Как узнать по какому элементу списка кликнули?
Код: Выделить всё
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView parentView, View childView, int position, long id) {
//position - позиция в списке
//id - айди привязанных данных к адаптеру
}
});
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 41. Используем LayoutInflater для создания списка
Клевые у Вас уроки!
Возник такой вопрос. В цикле переменные tv... каждый раз инициализируются.
Почему невозможен такой вариант?
Возник такой вопрос. В цикле переменные tv... каждый раз инициализируются.
Код: Выделить всё
for (int i = 0; i < name.length; i++) {
Log.d("myLogs", "i = " + i);
View item = ltInflater.inflate(R.layout.item, linLayout, false);
TextView tvName = (TextView) item.findViewById(R.id.tvName);
tvName.setText(name[i]);
TextView tvPosition = (TextView) item.findViewById(R.id.tvPosition);
tvPosition.setText("Должность: " + position[i]);
TextView tvSalary = (TextView) item.findViewById(R.id.tvSalary);
tvSalary.setText("Оклад: " + String.valueOf(salary[i]));
item.getLayoutParams().width = LayoutParams.MATCH_PARENT;
item.setBackgroundColor(colors[i % 2]);
linLayout.addView(item);
}
Код: Выделить всё
TextView tvName = (TextView) item.findViewById(R.id.tvName);
TextView tvPosition = (TextView) item.findViewById(R.id.tvPosition);
TextView tvSalary = (TextView) item.findViewById(R.id.tvSalary);
for (int i = 0; i < name.length; i++) {
Log.d("myLogs", "i = " + i);
View item = ltInflater.inflate(R.layout.item, linLayout, false);
tvName.setText(name[i]);
tvPosition.setText("Должность: " + position[i]);
tvSalary.setText("Оклад: " + String.valueOf(salary[i]));
item.getLayoutParams().width = LayoutParams.MATCH_PARENT;
item.setBackgroundColor(colors[i % 2]);
linLayout.addView(item);
}
-
- Сообщения: 10
- Зарегистрирован: 14 дек 2012, 05:19
Re: Урок 41. Используем LayoutInflater для создания списка
Так ведь item-то у вас каждый раз разный, соответственно переменные каждый раз инициализируются именно потому, что соответствуют новым объектам.