Урок 109. Android 3. Fragments. ListFragment - список
Добавлено: 07 окт 2012, 23:00
В этом уроке:
- работаем с ListFragment
Click here to read this article!
- работаем с ListFragment
Click here to read this article!
Добро пожаловать на форум сайта
http://forum.startandroid.ru/
Вешайте стандартный вызов Activity в onListItemClick.Ilyatoon писал(а):А можно сделать так, чтобы по нажатию на пункт списка был переход на другую Activity?
Это вам нужен Урок 48 и последующие.ri_sergey писал(а):Здравствуйте.
Подскажите пожалуйста, как можно вставлять дополнительные данные к элементу такого списка,
например изображения и описание элемента в список?
Урок 51 )ri_sergey писал(а):Спасибо, damager82.
А есть ли способ регистрировать контекстное меню для элементов?
Код: Выделить всё
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();
}
}
При перечислении параметров метода используйте запятую, а не точку с запятойStas0n писал(а):Подчеркивает onListItemClick и пишет: "void is an invalid type for the variable onListItemClick"
Кроме того, подчеркивает последнюю скобку и пишет:
"Syntax error on token ")", ; expected"
"Syntax error on token ")", ; expected"
Код: Выделить всё
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>
Да, библиотека подключена. Eclipse в новой версии ее автоматом цепляет.KamiSempai писал(а):А вы когда в коде писали "import android.support.v4.app.ListFragment;", соответствующую библиотеку подключали?
По оводу XML. Я бы посоветовал перенести создание массива в onActivityCreated.
И еще. Почему "String data[]", а не "String[] data"? Или я чего то не понимаю?
если не ошибаюсь яве всё равно как писать...Почему "String data[]", а не "String[] data"? Или я чего то не понимаю?
Даже так не работает?blackdiamond писал(а):Попробовал перенести создание массива в onActivityCreated - ничего не изменилось, ошибка та же.
Код: Выделить всё
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, getResources().getStringArray(R.strings.steps));
Решил проблему с отображением данных из ".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
Код: Выделить всё
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
Дело в том, что все объекты, создаваемые вне методов, создаются еще до вызова конструктора самого объекта(но после вызова конструктора суперкласса). Скорее всего на тот момент объект был не окончательно подготовлен для работы с ним и getResources() работал не совсем так как надо.blackdiamond писал(а):З.Ы. Люди добрые, подскажите дураку, почему код не работал, если массив объявляли до метода???В тоже самое время, если объявить массив программно ДО метода, то прога работает.Код: Выделить всё
public void onActivityCreated
Почему такая "нелюбовь" к массивам в ".xml"?
Благодарю за ответ!KamiSempai писал(а):Дело в том, что все объекты, создаваемые вне методов, создаются еще до вызова конструктора самого объекта(но после вызова конструктора суперкласса). Скорее всего на тот момент объект был не окончательно подготовлен для работы с ним и getResources() работал не совсем так как надо.
getActivity() - это метод фрагмента. Вы в фрагменте его вызываете?test1 писал(а):Ругается на:
getActivity()
Сообщение:
Method is undefined for the type (имя активити)
У меня FragmentActivity - может быть из-за этого?
В том то и дело, у меня есть фрагмент активити, есть 2 фрагмента, и код который должен быть в 1 файле(фрагмент активити) вот в нем он и не пашет с этой строкой.damager82 писал(а):getActivity() - это метод фрагмента. Вы в фрагменте его вызываете?test1 писал(а):Ругается на:
getActivity()
Сообщение:
Method is undefined for the type (имя активити)
У меня FragmentActivity - может быть из-за этого?