Урок 111. Android 3. Fragments. PreferenceFragment - настройки. Headers
Re: Урок 111. Android 3. Fragments. PreferenceFragment
Нет PrefenceActivity, есть Activity с содержимым PreferenceFragment.
В статье написано PreferenceActivity is the base class for an activity to show a hierarchy of preferences to the user. Prior to HONEYCOMB this class only allowed the display of a single set of preference
Но хотелось бы, чтобы понимающие люди объяснили на пальцах.
В статье написано PreferenceActivity is the base class for an activity to show a hierarchy of preferences to the user. Prior to HONEYCOMB this class only allowed the display of a single set of preference
Но хотелось бы, чтобы понимающие люди объяснили на пальцах.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
Могу сказать лишь одно, в реализации настроек царит хаос. Как использовать? Лично мы используем банально скрывая его содержимое на основном экране. При показе, просто делаем видимым контейнер с настройками. Костыльно конечно, и это очень не нравится. В чем собственно хаос:
PreferenceActivity (API<11)
PreferenceFragment (API>=11)
Headers - tablets (API only>=11)
ничего - tablets (API<11)
И этот зоопарк надо обслуживать. Я задал вопрос на stackoverflow, но все молчат как партизаны. Боюсь что тут правильный ответ будет, это делать свои настройки. Делайте фрагменты и обрабатывайте нажатия. Вы тем самым уйдете от всего хаоса, что присутствует, + получите кастомизацию настроек.
PreferenceActivity (API<11)
PreferenceFragment (API>=11)
Headers - tablets (API only>=11)
ничего - tablets (API<11)
И этот зоопарк надо обслуживать. Я задал вопрос на stackoverflow, но все молчат как партизаны. Боюсь что тут правильный ответ будет, это делать свои настройки. Делайте фрагменты и обрабатывайте нажатия. Вы тем самым уйдете от всего хаоса, что присутствует, + получите кастомизацию настроек.
Re: Урок 111. Android 3. Fragments.
Если кому интересно вот ссылка на статью с примерами
http://www.mysamplecode.com/2011/11/and ... le_12.html
Мне помогло
http://www.mysamplecode.com/2011/11/and ... le_12.html
Мне помогло
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
С телефона запустилась, а с планшета нет. Попросила метод : protected boolean isValidFragment (String fragmentName) . Добавил в MainActivity просто пустой метод и на выход true . Запустилось)
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
Так и не удалось создать конфигурацию эмулятора, которая возвращала бы true для isMultiPane. Уж Nexus 7 точно должен делить экран, а делать этого не хочет. Для проверки работы приложения нашел временное решение проблемы: переопределение onIsMultiPane и установка true в качестве возвращаемого значения метода.
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
Если прописать в манифесте у "android:launchMode="singleTask"" у Activity, то заголовки работать не будут... (долго ходил по кругу и не мог понять в чем проблема)
Ну и да, как писалось выше, на KitKat нужно переопределять метод isValidFragment(), о чем в документации сабо собой не написано ничего...
Ну и да, как писалось выше, на KitKat нужно переопределять метод isValidFragment(), о чем в документации сабо собой не написано ничего...
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
Всё сделал по уроку, правда у меня с фрагментами, выдает ошибку в строке 62
Красным - replace и пишет -
The method replace(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, Fragment1)
Я так понял с Preference каша сейчас. Кто-то может посоветовать простой способ сохранения настроек для всех версий ? Или этот код как-то исправить что-бы работало везде. Настройки очень нужны. Хелп, плз.
Что скажете про этот код ? Работает он везде или нет и работает ли с фрагментами ?
http://www.mysamplecode.com/2011/11/and ... le_12.html
MainActivity.java
[syntax=java5]package com.example.p0711_prefsimp;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new Fragment1()).commit();
return rootView;
}
}
}[/syntax]
Fragment1.java
[syntax=java5]package com.example.p0711_prefsimp;
import android.os.Bundle;
import android.preference.PreferenceFragment;
public class Fragment1 extends PreferenceFragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref1);
}
}[/syntax]
Красным - replace и пишет -
The method replace(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, Fragment1)
Я так понял с Preference каша сейчас. Кто-то может посоветовать простой способ сохранения настроек для всех версий ? Или этот код как-то исправить что-бы работало везде. Настройки очень нужны. Хелп, плз.
Что скажете про этот код ? Работает он везде или нет и работает ли с фрагментами ?
http://www.mysamplecode.com/2011/11/and ... le_12.html
MainActivity.java
[syntax=java5]package com.example.p0711_prefsimp;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
getFragmentManager().beginTransaction()
.replace(android.R.id.content, new Fragment1()).commit();
return rootView;
}
}
}[/syntax]
Fragment1.java
[syntax=java5]package com.example.p0711_prefsimp;
import android.os.Bundle;
import android.preference.PreferenceFragment;
public class Fragment1 extends PreferenceFragment {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref1);
}
}[/syntax]
Тут должна быть подпись.
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
Примеры из более ранних уроков (71, 72) без фрагментов, будут работать везде на всех версиях Android, то что некоторые методы будут отмечены как Deprecated (если в компилите с Android старше 11) пусть вас не смущает.
-
- Сообщения: 6
- Зарегистрирован: 24 май 2014, 21:01
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
Как это чудо повязать с другими фрагментами? К примеру:
Код: Выделить всё
private void selectItem(int position) {
// Update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
fragment = new News();
break;
case 1:
fragment = new Needhelp();
break;
case 2:
fragment = new Sectorc();
break;
case 3:
fragment = new Howhelp();
break;
case 4:
fragment = new Howget();
break;
case 5:
fragment = new Fragment1();
break;
default:
break;
}
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
Не используйте никогда это чудо. Я не встречал ни одного проекта с ними.
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
Добрый день.
Подскажите, пожалуйста, а можно из настроек запросить какой-либо метод, в котором например проверяется подключение к БД?
Спасибо.
Подскажите, пожалуйста, а можно из настроек запросить какой-либо метод, в котором например проверяется подключение к БД?
Спасибо.
-
- Сообщения: 42
- Зарегистрирован: 25 янв 2015, 18:57
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
Спасибо, Вы помогли)Tabun писал(а):С телефона запустилась, а с планшета нет. Попросила метод : protected boolean isValidFragment (String fragmentName) . Добавил в MainActivity просто пустой метод и на выход true . Запустилось)
-
- Сообщения: 54
- Зарегистрирован: 23 сен 2013, 10:51
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
Привет, помогите советом.
Допустим есть 2 кнопки, я хочу менять настройки (текст,цвет текста) каждой из этих кнопок.
Кликнув по первой откроется активити с PreferenceFragment и в соответствующие поля уже чтобы были записаны текущие значения кнопки, если нужно поменял и после закрытия тут же принялись к кнопке на которую кликал.
Задача в целом тривиальная, как её решить? Как я понял PreferenceFragment заточен для настроек приложения в целом, а не отдельных его частей.
Спасибо всем откликнувшимся.
Допустим есть 2 кнопки, я хочу менять настройки (текст,цвет текста) каждой из этих кнопок.
Кликнув по первой откроется активити с PreferenceFragment и в соответствующие поля уже чтобы были записаны текущие значения кнопки, если нужно поменял и после закрытия тут же принялись к кнопке на которую кликал.
Задача в целом тривиальная, как её решить? Как я понял PreferenceFragment заточен для настроек приложения в целом, а не отдельных его частей.
Спасибо всем откликнувшимся.
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
Обычный SharedPreferences + примитивы: цвет - инт, текст -стринг
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
-
- Сообщения: 54
- Зарегистрирован: 23 сен 2013, 10:51
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
SharedPreferences хранит в файле?doter.ua писал(а):Обычный SharedPreferences + примитивы: цвет - инт, текст -стринг
У меня динамически создаваемые кнопки, могут удаляться\добавляться произвольно, есть класс который расширяет кнопку в нем хранятся настройки кнопок у него сэтеры\гэтеры. Кнопок может быть 1, а может быть 20.
Еслиб были статические 2 кнопки уже б давно решил с SharedPreferences, а тут....
Просто надо вызвать активити (PreferenceFragment) с настройками и передать ему текущие значение запросив гетерами из класса кнопки, поправить настройки в фрагменте и после закрытия надо чтобы новые значения прописались сэтерами, реализовать то можно обычным активити, но как то не комильфо.
-
- Сообщения: 54
- Зарегистрирован: 23 сен 2013, 10:51
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
up, пацаны, какие варианты?
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
В эмуляторе (АПИ-16) код урока работает полностью, только браузер не открывает страницу.
На телефоне (АПИ-19) открывается только третий заголовок с настройками дисплея, на первом и втором ошибка.
На телефоне (АПИ-19) открывается только третий заголовок с настройками дисплея, на первом и втором ошибка.
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
Здравствуйте!
Есть вопрос по данной теме. Набросал пример, но появилась проблема - не переходит на новый скрин с фрагментом, возможно сможете помочь
MainActivity
MainPreferenceFragment
main_preference_layout
EventsPreferenceFragment
events_preference_layout
Не переходит на EventsPreferenceFragment. Даже уже не знаю в чем проблема. Виден клик но результата никакого.
Заранее спасибо
Есть вопрос по данной теме. Набросал пример, но появилась проблема - не переходит на новый скрин с фрагментом, возможно сможете помочь
MainActivity
Код: Выделить всё
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new MainPreferenceFragment()).commit();
}
}
Код: Выделить всё
public class MainPreferenceFragment extends PreferenceFragment
{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.main_preference_layout);
}
}
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBoxPreference
android:key="isEnabledNotifications"
android:summary="Enable notifications"
android:title="Notifications">
</CheckBoxPreference>
<PreferenceScreen
android:fragment="com.vds.missedevents.EventsPreferenceFragment"
android:summary="Ev"
android:title="Eents"/>
</PreferenceScreen>
Код: Выделить всё
public class EventsPreferenceFragment extends PreferenceFragment
{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.events_preference_layout);
}
}
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen
android:summary="Ewwwv"
android:title="Eeeeents">
</PreferenceScreen>
</PreferenceScreen>
Заранее спасибо
-
- Сообщения: 2
- Зарегистрирован: 31 май 2017, 11:11
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
Чтобы заработало, добавьте в MainActivity метод:vorskla писал(а):В эмуляторе (АПИ-16) код урока работает полностью, только браузер не открывает страницу.
На телефоне (АПИ-19) открывается только третий заголовок с настройками дисплея, на первом и втором ошибка.
Код: Выделить всё
protected boolean isValidFragment (String fragmentName){
return true;
}
Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас
Спасибо, помогло.
Вставил в MainActivity пустой метод и всё заработало
@Override
protected boolean isValidFragment(String fragmentName) {
return true;
}