Урок 109. Android 3. Fragments. ListFragment - список
Урок 109. Android 3. Fragments. ListFragment - список
В этом уроке:
- работаем с ListFragment
Click here to read this article!
- работаем с ListFragment
Click here to read this article!
Последний раз редактировалось damager82 23 май 2017, 22:11, всего редактировалось 8 раз.
Re: Урок 109. Android 3. Fragments. ListFragment - список
А можно сделать так, чтобы по нажатию на пункт списка был переход на другую Activity?
Re: Урок 109. Android 3. Fragments. ListFragment - список
Вешайте стандартный вызов Activity в onListItemClick.Ilyatoon писал(а):А можно сделать так, чтобы по нажатию на пункт списка был переход на другую Activity?
Как вызывать - можно глянуть в Уроке 21
Re: Урок 109. Android 3. Fragments. ListFragment - список
Здравствуйте.
Подскажите пожалуйста, как можно вставлять дополнительные данные к элементу такого списка,
например изображения и описание элемента в список?
Подскажите пожалуйста, как можно вставлять дополнительные данные к элементу такого списка,
например изображения и описание элемента в список?
Re: Урок 109. Android 3. Fragments. ListFragment - список
Это вам нужен Урок 48 и последующие.ri_sergey писал(а):Здравствуйте.
Подскажите пожалуйста, как можно вставлять дополнительные данные к элементу такого списка,
например изображения и описание элемента в список?
Re: Урок 109. Android 3. Fragments. ListFragment - список
Спасибо, damager82.
А есть ли способ регистрировать контекстное меню для элементов?
А есть ли способ регистрировать контекстное меню для элементов?
Re: Урок 109. Android 3. Fragments. ListFragment - список
Урок 51 )ri_sergey писал(а):Спасибо, damager82.
А есть ли способ регистрировать контекстное меню для элементов?
Re: Урок 109. Android 3. Fragments. ListFragment - список
У почему то ругается на onListItemClick. Главное - никак не могу понять почему.
Подчеркивает onListItemClick и пишет: "void is an invalid type for the variable onListItemClick"
Кроме того, подчеркивает последнюю скобку и пишет:
"Syntax error on token ")", ; expected"
"Syntax error on token ")", ; expected"
Как с этим бороться?
Код: Выделить всё
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setTitle("New List");
listView = (ListView)findViewById(android.R.id.list);
adapter = new ItemAdapter();
adapter.addEnginesNames(names);
adapter.addEnginesDescriptions(descriptions);
adapter.addEnginesLogoUrl(logoUrl);
listView.setAdapter(adapter);
MyTask mt = new MyTask();
mt.execute();
listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
...
...
...
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {}
});
public void onListItemClick(ListView l; View v; int position; long id) {
String item = (String) getListAdapter().getItem(position);
Toast.makeText(this, "olololo" + item, Toast.LENGTH_LONG).show();
}
}
Кроме того, подчеркивает последнюю скобку и пишет:
"Syntax error on token ")", ; expected"
"Syntax error on token ")", ; expected"
Как с этим бороться?
Re: Урок 109. Android 3. Fragments. ListFragment - список
При перечислении параметров метода используйте запятую, а не точку с запятойStas0n писал(а):Подчеркивает onListItemClick и пишет: "void is an invalid type for the variable onListItemClick"
Кроме того, подчеркивает последнюю скобку и пишет:
"Syntax error on token ")", ; expected"
"Syntax error on token ")", ; expected"
И где-то со скобками напутано, проверьте все.
-
- Сообщения: 12
- Зарегистрирован: 06 дек 2012, 12:24
Урок 109 - нужны советы
Уважаемый автор и уважаемые профи, нуждаюсь в совете по данному уроку.
Уже долго бьюсь над уроком, но успешно запускается он только при 2 условиях.
Условие 1: отключена поддержка версий андроида ниже 3;
Условие 2: массив строк выполнен как и у автора в коде, а не в ".xml" файле.
Вот рабочий код фрагмента (ListFrag.java):
Вот "strings.xml"
Разметка главного активити (mainlayout.xml):
Манифест приложения:
Все это работает, если убираем из манифеста поддержку Android ниже 3 (API 11) и если массив задан напрямую в коде.
Если раскомментить в коде фрагмента строку: String data []= getResources().getStringArray(R.strings.steps);
(естественно заккоментив строку String data[] = new String[] { "one", "two", "three", "four" };), то Eclipse выдает ошибку: "strings cannot be resolved or is not a field".
Вопрос - как бороться с проблемой, т.е. как сделать чтобы приложение приняло стринговый массив из ".xml" файла, и как сделать так, чтобы старые версии Android понимали данный код?
З.Ы. Пробовал в коде фрагмента вставлять вместо "import android.app.ListFragment;" "import android.support.v4.app.ListFragment;" - безрезультатно.
К сожалению, не нашел как можно вставлять в сообщение скриншоты (или вообще картинки, при нажатии на кнопку форума "Img" запрос на вставку картинки не отображается). Такая функция есть?
К 109 уроку можно добавить одно предложение с напоминанием занести в манифест активность класса MainList.java
Уже долго бьюсь над уроком, но успешно запускается он только при 2 условиях.
Условие 1: отключена поддержка версий андроида ниже 3;
Условие 2: массив строк выполнен как и у автора в коде, а не в ".xml" файле.
Вот рабочий код фрагмента (ListFrag.java):
Код: Выделить всё
package ry.mylistfr.mylistfragment;
import android.os.Bundle;
import android.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
public class ListFrag extends ListFragment
{
String data[] = new String[] { "one", "two", "three", "four" };
//String data []= getResources().getStringArray(R.strings.steps);
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, data);
setListAdapter(adapter);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fr, null);
}
}
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">MyListFragment</string>
<string name="hello_world">Hello world!</string>
<string name="menu_settings">Settings</string>
<string name="number_list">Список чисел</string>
<string name="empty">Нет данных</string>
<string-array name="steps">
<item>Step_one</item>
<item>Step_two</item>
<item>Step_3</item>
<item>Step_4</item>
<item>Step_5</item>
<item>Один</item>
<item>Два</item>
<item>Три</item>
</string-array>
</resources>
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment
android:name="ry.mylistfr.mylistfragment.ListFrag"
android:layout_width="match_parent"
android:layout_height="match_parent">
</fragment>
</LinearLayout>
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ry.mylistfr.mylistfragment"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="16" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="ry.mylistfr.mylistfragment.MainlayoutActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="ry.mylistfr.mylistfragment.ListFrag">
</activity>
</application>
</manifest>
Если раскомментить в коде фрагмента строку: String data []= getResources().getStringArray(R.strings.steps);
(естественно заккоментив строку String data[] = new String[] { "one", "two", "three", "four" };), то Eclipse выдает ошибку: "strings cannot be resolved or is not a field".
Вопрос - как бороться с проблемой, т.е. как сделать чтобы приложение приняло стринговый массив из ".xml" файла, и как сделать так, чтобы старые версии Android понимали данный код?
З.Ы. Пробовал в коде фрагмента вставлять вместо "import android.app.ListFragment;" "import android.support.v4.app.ListFragment;" - безрезультатно.
К сожалению, не нашел как можно вставлять в сообщение скриншоты (или вообще картинки, при нажатии на кнопку форума "Img" запрос на вставку картинки не отображается). Такая функция есть?
К 109 уроку можно добавить одно предложение с напоминанием занести в манифест активность класса MainList.java
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 109. Android 3. Fragments. ListFragment - список
А вы когда в коде писали "import android.support.v4.app.ListFragment;", соответствующую библиотеку подключали?
По оводу XML. Я бы посоветовал перенести создание массива в onActivityCreated.
И еще. Почему "String data[]", а не "String[] data"? Или я чего то не понимаю?
По оводу XML. Я бы посоветовал перенести создание массива в onActivityCreated.
И еще. Почему "String data[]", а не "String[] data"? Или я чего то не понимаю?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
-
- Сообщения: 12
- Зарегистрирован: 06 дек 2012, 12:24
Re: Урок 109. Android 3. Fragments. ListFragment - список
Да, библиотека подключена. Eclipse в новой версии ее автоматом цепляет.KamiSempai писал(а):А вы когда в коде писали "import android.support.v4.app.ListFragment;", соответствующую библиотеку подключали?
По оводу XML. Я бы посоветовал перенести создание массива в onActivityCreated.
И еще. Почему "String data[]", а не "String[] data"? Или я чего то не понимаю?
String data[] - это как в уроке у автора, и судя по справочнику Java (Вильямс - полный справочник по java) массивы задают так.
Проверил этот факт 10 раз, потому как, к сожалению, в java разбираюсь плохо - от этого и страдаю
![Улыбается :)](./images/smilies/icon_e_smile.gif)
Попробовал перенести создание массива в onActivityCreated - ничего не изменилось, ошибка та же.
Re: Урок 109. Android 3. Fragments. ListFragment - список
если не ошибаюсь яве всё равно как писать...Почему "String data[]", а не "String[] data"? Или я чего то не понимаю?
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 109. Android 3. Fragments. ListFragment - список
Даже так не работает?blackdiamond писал(а):Попробовал перенести создание массива в onActivityCreated - ничего не изменилось, ошибка та же.
Код: Выделить всё
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, getResources().getStringArray(R.strings.steps));
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
-
- Сообщения: 12
- Зарегистрирован: 06 дек 2012, 12:24
Re: Урок 109. Android 3. Fragments. ListFragment - список
Решил проблему с отображением данных из ".xml"KamiSempai писал(а):Даже так не работает?С фрагментами может еще быть проблема в обработке XML.Код: Выделить всё
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, getResources().getStringArray(R.strings.steps));
Способ, предложенный выше
Код: Выделить всё
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1, getResources().getStringArray(R.strings.steps));
Код: Выделить всё
public void onActivityCreated
Потом подставил вместо getResources().getStringArray(R.strings.steps) следующий код getResources().getStringArray(R.array.steps) - опять не вышло.
А вот когда совместил оба способа - тогда и вышло, т.е.:
1. Пишем
Код: Выделить всё
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_activated_1, getResources().getStringArray(R.array.steps));
setListAdapter(adapter);
Код: Выделить всё
public void onActivityCreated
Итого рабочий код:
Код: Выделить всё
package ry.mylistfr.mylistfragment;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class ListFrag extends ListFragment
{
//String data[] = new String[] { "one", "two", "three", "four" };
//String data []= getResources().getStringArray(R.array.steps);
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_activated_1, getResources().getStringArray(R.array.steps));
setListAdapter(adapter);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fr, null);
}
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Toast.makeText(getActivity(), "position = " + position, Toast.LENGTH_SHORT).show();
}
}
З.Ы. Люди добрые, подскажите дураку, почему код не работал, если массив объявляли до метода???
Код: Выделить всё
public void onActivityCreated
Почему такая "нелюбовь" к массивам в ".xml"?
![Улыбается :)](./images/smilies/icon_e_smile.gif)
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 109. Android 3. Fragments. ListFragment - список
Дело в том, что все объекты, создаваемые вне методов, создаются еще до вызова конструктора самого объекта(но после вызова конструктора суперкласса). Скорее всего на тот момент объект был не окончательно подготовлен для работы с ним и getResources() работал не совсем так как надо.blackdiamond писал(а):З.Ы. Люди добрые, подскажите дураку, почему код не работал, если массив объявляли до метода???В тоже самое время, если объявить массив программно ДО метода, то прога работает.Код: Выделить всё
public void onActivityCreated
Почему такая "нелюбовь" к массивам в ".xml"?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
-
- Сообщения: 12
- Зарегистрирован: 06 дек 2012, 12:24
Re: Урок 109. Android 3. Fragments. ListFragment - список
Благодарю за ответ!KamiSempai писал(а):Дело в том, что все объекты, создаваемые вне методов, создаются еще до вызова конструктора самого объекта(но после вызова конструктора суперкласса). Скорее всего на тот момент объект был не окончательно подготовлен для работы с ним и getResources() работал не совсем так как надо.
Пытаюсь совместить два урока:
"Урок 107. Android 3. ActionBar. Размещение элементов" и данный, 109 урок "Урок 109. Android 3. Fragments. ListFragment - список".
Опять не все так радужно. Элементы ActionBar появились и всё прекрасно, а с ListFragment опять засада.
Делаю все как описал выше, но вместо списка выводится фраза: "нет данных".
Т.е. как-будто адаптер не грузит данные (как на первом скриншоте у автора в 109 уроке). Программа компилится без ошибок, все Ок, а данные в список не грузятся.
Но, пожалуй, не буду загромождать форум своими проблемами, итак много вопросов назадавал, буду разбираться сам.
З.Ы. Спасибо автору за полезные и бесплатные уроки!
Re: Урок 109. Android 3. Fragments. ListFragment - список
Ругается на:
getActivity()
Сообщение:
Method is undefined for the type (имя активити)
У меня FragmentActivity - может быть из-за этого?
Еще вопрос к админу:
У меня есть 2 вью, и к нему было 2 активити, я их переключал кнопками
мне надо было сделать что бы я мог эти 2 вью переключать свайпами, и я сделал по примеру гугловскому, где юзаются фрагменты -
активити стали фрагментами, но весь код из них пришлось перенести в главную активити управляющую ими, будет ли так работать? (п.с. сейчас попробывал не работает но вообще это возможно?)
Еще вопрос можно ли фрагмент внутри фрагмента ставить? (к примеру внутри вью вставить лист фрагмент с лист вью)
Еще вопрос предложение о: сделайте хорошие примеры где из 1го класса вызываются функции работающие с вью из другого класса.
getActivity()
Сообщение:
Method is undefined for the type (имя активити)
У меня FragmentActivity - может быть из-за этого?
Еще вопрос к админу:
У меня есть 2 вью, и к нему было 2 активити, я их переключал кнопками
мне надо было сделать что бы я мог эти 2 вью переключать свайпами, и я сделал по примеру гугловскому, где юзаются фрагменты -
активити стали фрагментами, но весь код из них пришлось перенести в главную активити управляющую ими, будет ли так работать? (п.с. сейчас попробывал не работает но вообще это возможно?)
Еще вопрос можно ли фрагмент внутри фрагмента ставить? (к примеру внутри вью вставить лист фрагмент с лист вью)
Еще вопрос предложение о: сделайте хорошие примеры где из 1го класса вызываются функции работающие с вью из другого класса.
Re: Урок 109. Android 3. Fragments. ListFragment - список
getActivity() - это метод фрагмента. Вы в фрагменте его вызываете?test1 писал(а):Ругается на:
getActivity()
Сообщение:
Method is undefined for the type (имя активити)
У меня FragmentActivity - может быть из-за этого?
Re: Урок 109. Android 3. Fragments. ListFragment - список
В том то и дело, у меня есть фрагмент активити, есть 2 фрагмента, и код который должен быть в 1 файле(фрагмент активити) вот в нем он и не пашет с этой строкой.damager82 писал(а):getActivity() - это метод фрагмента. Вы в фрагменте его вызываете?test1 писал(а):Ругается на:
getActivity()
Сообщение:
Method is undefined for the type (имя активити)
У меня FragmentActivity - может быть из-за этого?
Если я разбиваю код на 2 части(2фрагмента) то потом проблема с их одновременной активацией при запуске фрагмент активити, точнее у меня есть подключение которое необходимо в обеих фрагментах, а я хз как его и там и там использовать кроме как в 1 фрагмент активити вписать, или можно фрагменты как активити обычные использовать? задавая методы он креейт и импортируя друг в друга.
Спасибо за ответы.
Последний раз редактировалось test1 18 дек 2012, 10:55, всего редактировалось 1 раз.