Урок 41. Используем LayoutInflater для создания списка
Re: Урок 41. Используем LayoutInflater для создания списка
А есть ли способ отобразить миллион записей на экране Андроида?
Ну разумеется вопрос не корректный. Т.е. вынуть из БД миллион записей и отобразить их, например. Т.е. визуально будет от силы 10-20 элементов на экране, а остальные должны быть доступны по прокрутке списка например? Справится ли Андроид с такой задачей?
Ну разумеется вопрос не корректный. Т.е. вынуть из БД миллион записей и отобразить их, например. Т.е. визуально будет от силы 10-20 элементов на экране, а остальные должны быть доступны по прокрутке списка например? Справится ли Андроид с такой задачей?
Re: Урок 41. Используем LayoutInflater для создания списка
Тоже столкнулся с такой проблемой. Это можно как-то исправить или лучше сразу на ListView переделать?Artemprodigy писал(а):список во время прокрутки плывёт, не правильно отрисовывается, как будто на друг друга налаживается
Re: Урок 41. Используем LayoutInflater для создания списка
нужно удалить этот урок... =)
используйте ListView
используйте ListView
Re: Урок 41. Используем LayoutInflater для создания списка
Ок, так и сделал)klblk писал(а):используйте ListView
Re: Урок 41. Используем LayoutInflater для создания списка
андроид не предназначен для таких целей. Но вы всегда можете попробовать.petdroid писал(а):А есть ли способ отобразить миллион записей на экране Андроида?
Ну разумеется вопрос не корректный. Т.е. вынуть из БД миллион записей и отобразить их, например. Т.е. визуально будет от силы 10-20 элементов на экране, а остальные должны быть доступны по прокрутке списка например? Справится ли Андроид с такой задачей?
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 41. Используем LayoutInflater для создания списка
А можно ли получить доступ к View, из которых при помощи Inflate создан "родительский" view?
Например,
[syntax=java]
View customView = layoutInflater.inflate(R.layout.custom_view,null, false);
TextView textView = (TextView)customView.findViewById(R.id.textView);[/syntax]
Как, используя customView поменять текст в textView?
Например,
[syntax=java]
View customView = layoutInflater.inflate(R.layout.custom_view,null, false);
TextView textView = (TextView)customView.findViewById(R.id.textView);[/syntax]
Как, используя customView поменять текст в textView?
Arbeit macht Fry
Re: Урок 41. Используем LayoutInflater для создания списка
Проще чем вы уже написали сделать не получится.
Re: Урок 41. Используем LayoutInflater для создания списка
Ладно, перефразирую
[syntax=java]public void someMethod() {
View v = getCustomView();
}
public View getCustomView(){
View customView = layoutInflater.inflate(R.layout.custom_view,null, false);
TextView textView = (TextView)customView.findViewById(R.id.textView);
return customView;
}[/syntax]
Как, имея v, получить доступ к textView и поменять в нем текст, например ?
[syntax=java]public void someMethod() {
View v = getCustomView();
}
public View getCustomView(){
View customView = layoutInflater.inflate(R.layout.custom_view,null, false);
TextView textView = (TextView)customView.findViewById(R.id.textView);
return customView;
}[/syntax]
Как, имея v, получить доступ к textView и поменять в нем текст, например ?
Arbeit macht Fry
Re: Урок 41. Используем LayoutInflater для создания списка
Вы же сами получаете: (TextView)customView.findViewById(R.id.textView);Fry писал(а):Ладно, перефразирую
[syntax=java]public void someMethod() {
View v = getCustomView();
}
public View getCustomView(){
View customView = layoutInflater.inflate(R.layout.custom_view,null, false);
TextView textView = (TextView)customView.findViewById(R.id.textView);
return customView;
}[/syntax]
Как, имея v, получить доступ к textView и поменять в нем текст, например ?
Так зачем return customView, когда можно Текствью и отдавать.
Код: Выделить всё
public TextView getCustomView(){
View customView = layoutInflater.inflate(R.layout.custom_view,null, false);
return (TextView)customView.findViewById(R.id.textView);
}
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Урок 41. Используем LayoutInflater для создания списка
Ну вот есть у меня готовый View. Тупо просто есть. Этот код просто иллюстрирует, что View уже создан и передан.
Мой вопрос не в том, чтобы менять текст на этапе "создания", а в том, можно ли получить доступ к его "внутренностям" через уже созданный View. Примерно как через фрагмент можно получить доступ к View, которые находятся на нем.
Понятно, что можно еще раз найти у View его элементы, и переопледелить их. Но вдруг есть способы по-другом получить к ним доступ.
Мой вопрос не в том, чтобы менять текст на этапе "создания", а в том, можно ли получить доступ к его "внутренностям" через уже созданный View. Примерно как через фрагмент можно получить доступ к View, которые находятся на нем.
Понятно, что можно еще раз найти у View его элементы, и переопледелить их. Но вдруг есть способы по-другом получить к ним доступ.
Arbeit macht Fry
Re: Урок 41. Используем LayoutInflater для создания списка
Есть вопрос по этому коду:
Для чего нужно присваивать MATCH_PARENT, если и без этого стоит MATCH_PARENT?
Код: Выделить всё
item.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
Re: Урок 41. Используем LayoutInflater для создания списка
Приветик у меня вопрос в этом уроке мы прописали список но я бы хотел узнать как в приложении при помощи нажатия (на экран смартфона) вызвать меню и выбирать редактировать текст или удалить и тем самым создавать список. Кодить за меня не надо (нужно самому научиться) но если есть уроки по моему вопросу напишите ответ заранее спасибо.
ПС программированием занимаюсь недолго только учусь и много не знаю так что надеюсь на помощь
ПС программированием занимаюсь недолго только учусь и много не знаю так что надеюсь на помощь
Re: Урок 41. Используем LayoutInflater для создания списка
Подскажите, что я делаю не так?
Урок 41. Используем LayoutInflater для создания списка
Компилируется, запускается на эмуляторе и завершается с ошибкой:
Caused by: java.lang.NullPointerException
Путем комментирования части кода выяснил, что ошибка возникает на методе setText уже при первом же обращении в цикле.
Возникает ощущение, что фактически лайаут или вьюшки не создались, и при попытке работать с ними вываливается приложение.
Стандартный скопипащеный item.xml:
onCreate:
Урок 41. Используем LayoutInflater для создания списка
Компилируется, запускается на эмуляторе и завершается с ошибкой:
Caused by: java.lang.NullPointerException
Путем комментирования части кода выяснил, что ошибка возникает на методе setText уже при первом же обращении в цикле.
Возникает ощущение, что фактически лайаут или вьюшки не создались, и при попытке работать с ними вываливается приложение.
Стандартный скопипащеный item.xml:
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="10dp">
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_gravity="top|center_horizontal"
android:textSize="24sp">
</TextView>
<TextView
android:id="@+id/tvPosition"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_gravity="bottom|left"
android:layout_marginLeft="5dp">
</TextView>
<TextView
android:id="@+id/tvSalary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:layout_gravity="bottom|right"
android:layout_marginRight="5dp">
</TextView>
</FrameLayout>
Код: Выделить всё
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
colors[0] = Color.parseColor("#559966CC");
colors[1] = Color.parseColor("#55336699");
LinearLayout linLayout = (LinearLayout) findViewById(R.id.linLayout);
LayoutInflater ltInflater = getLayoutInflater();
TextView tvName, tvPosition, tvSalary;
View item;
for (int i = 0; i < name.length; i++)
{
Log.d("myLog", "i = " + i);
item = ltInflater.inflate(R.layout.item, linLayout, false);
tvName = (TextView)findViewById(R.id.tvName);
tvName.setText(name[i]);
tvPosition = (TextView)findViewById(R.id.tvPosition);
tvPosition.setText("Position: " + position[i]);
tvSalary = (TextView)findViewById(R.id.tvSalary);
tvSalary.setText("Salary: " + salary[i]);
item.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
item.setBackgroundColor(colors[i % 2]);
linLayout.addView(item);
}
}
Re: Урок 41. Используем LayoutInflater для создания списка
По ссылке в подписи
Гадать не надо
Гадать не надо
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 41. Используем LayoutInflater для создания списка
Вполне понятно, что раз получил NPE, то пытаюсь работать с NULL объектом.Foenix писал(а):По ссылке в подписи
Гадать не надо
Вопрос, почему объект NULL?
Переменные объявлены, и View item и TextView tvName (и другие TextView).
item инициализируется:
item = ltInflater.inflate(R.layout.item, linLayout, false);
Не отработал инфлейтер? Почему?
Выводил в лог id для tvName после findViewById, он имел некое определенное многозначное положительное число. Я сделал вывод, что так и должно быть.
Re: Урок 41. Используем LayoutInflater для создания списка
Неужели так сложно сравнить код урока и свой код и понять что они отличаются? Просто построчно?
Re: Урок 41. Используем LayoutInflater для создания списка
Окай. Сравнил. Нашел отличие в одном, у меня переменные были объявлены за телом цикла, а в оригинальном примере переменные объявляются в теле цикла. ОК. Объявляем переменные в теле цикла. И снова NPE.klblk писал(а):Неужели так сложно сравнить код урока и свой код и понять что они отличаются? Просто построчно?
Изучаем лог.
Ошибка возникает при выполнении метода tvName.setText.
Пытаемся понять что происходит. Дописываем строчки:
Log.d("myLogs", "item.getId(): " + String.valueOf(item.getId()));
Log.d("myLogs", "tvName.getId(): " + String.valueOf(tvName.getId()));
Получаем:
item.getId(): -1
и NPE на второй строке, ибо, вероятно, не удалось вообще получить объект tvName, т.к. не удалось создать item из xml.
Уважаемый klblk, я так понимаю, вы видите в моем коде что-то, что никак не могу заметить я.
На данный момент код выглядит так:
Код: Выделить всё
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("myLogs", "DEBUG1");
colors[0] = Color.parseColor("#559966CC");
colors[1] = Color.parseColor("#55336699");
LinearLayout linLayout = (LinearLayout) findViewById(R.id.linLayout);
LayoutInflater ltInflater = getLayoutInflater();
Log.d("myLogs", "DEBUG1");
for (int i = 0; i < name.length; i++)
{
Log.d("myLogs", "i = " + i);
View item = ltInflater.inflate(R.layout.item, linLayout, false);
Log.d("myLogs", "item.getId(): " + String.valueOf(item.getId()));
TextView tvName = (TextView)findViewById(R.id.tvName);
Log.d("myLogs", "tvName.getId(): " + String.valueOf(tvName.getId()));
//tvName.setText(name[i]);
item.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
item.setBackgroundColor(colors[i % 2]);
linLayout.addView(item);
}
}
Re: Урок 41. Используем LayoutInflater для создания списка
Всем спасибо, особенно klblk за науку. Моей невнимательности нет предела!
Надо же не заметить такую важную деталь при наборе кода:
TextView tvName = (TextView) item.findViewById(R.id.tvName);
Надо же не заметить такую важную деталь при наборе кода:
TextView tvName = (TextView) item.findViewById(R.id.tvName);
Re: Урок 41. Используем LayoutInflater для создания списка
а если бы ты послушался меня, то нашел бы эту строчку сразу, не ставя какие-то логи и прочие ненужные вещи.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 41. Используем LayoutInflater для создания списка
Foenix, и тебе спасибо! Я почитал по ссылкам у тебя в подписи, но оно мне практически не помогло в решении моей проблемы. Не смог заметить ошибку. Я же только начал знакомиться с JAVA и разработкой под Android. И даже самые простые ошибки пока не выявляются "на первый взгляд". Хотя кое-что нового для себя я оттуда, конечно, вынес.
Только по наводке klblk, при посимвольном сравнении, строчка за строчкой, я обнаружил
Только по наводке klblk, при посимвольном сравнении, строчка за строчкой, я обнаружил