Страница 2 из 2

Re: Урок 111. Android 3. Fragments. PreferenceFragment

Добавлено: 28 окт 2013, 13:39
Wp8Lover
Нет 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
Но хотелось бы, чтобы понимающие люди объяснили на пальцах.

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 28 окт 2013, 20:16
Mikhail_dev
Могу сказать лишь одно, в реализации настроек царит хаос. Как использовать? Лично мы используем банально скрывая его содержимое на основном экране. При показе, просто делаем видимым контейнер с настройками. Костыльно конечно, и это очень не нравится. В чем собственно хаос:
PreferenceActivity (API<11)
PreferenceFragment (API>=11)
Headers - tablets (API only>=11)
ничего - tablets (API<11)
И этот зоопарк надо обслуживать. Я задал вопрос на stackoverflow, но все молчат как партизаны. Боюсь что тут правильный ответ будет, это делать свои настройки. Делайте фрагменты и обрабатывайте нажатия. Вы тем самым уйдете от всего хаоса, что присутствует, + получите кастомизацию настроек.

Re: Урок 111. Android 3. Fragments.

Добавлено: 29 окт 2013, 12:19
Wp8Lover
Если кому интересно вот ссылка на статью с примерами
http://www.mysamplecode.com/2011/11/and ... le_12.html
Мне помогло :)

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 07 апр 2014, 19:44
Tabun
С телефона запустилась, а с планшета нет. Попросила метод : protected boolean isValidFragment (String fragmentName) . Добавил в MainActivity просто пустой метод и на выход true . Запустилось)

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 15 апр 2014, 19:35
denis_po3
Так и не удалось создать конфигурацию эмулятора, которая возвращала бы true для isMultiPane. Уж Nexus 7 точно должен делить экран, а делать этого не хочет. Для проверки работы приложения нашел временное решение проблемы: переопределение onIsMultiPane и установка true в качестве возвращаемого значения метода.

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 23 апр 2014, 03:22
klblk
Если прописать в манифесте у "android:launchMode="singleTask"" у Activity, то заголовки работать не будут... (долго ходил по кругу и не мог понять в чем проблема)
Ну и да, как писалось выше, на KitKat нужно переопределять метод isValidFragment(), о чем в документации сабо собой не написано ничего...

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 30 апр 2014, 18:17
AlexVinn
Всё сделал по уроку, правда у меня с фрагментами, выдает ошибку в строке 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]

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 30 апр 2014, 18:58
Viewer
Примеры из более ранних уроков (71, 72) без фрагментов, будут работать везде на всех версиях Android, то что некоторые методы будут отмечены как Deprecated (если в компилите с Android старше 11) пусть вас не смущает.

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 15 мар 2015, 00:10
AKhorevich
Как это чудо повязать с другими фрагментами? К примеру:

Код: Выделить всё

 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;
        }

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 15 мар 2015, 01:33
Mikhail_dev
Не используйте никогда это чудо. Я не встречал ни одного проекта с ними.

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 31 мар 2015, 09:52
Stannm
Добрый день.
Подскажите, пожалуйста, а можно из настроек запросить какой-либо метод, в котором например проверяется подключение к БД?
Спасибо.

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 22 окт 2015, 11:46
danek130995
Tabun писал(а):С телефона запустилась, а с планшета нет. Попросила метод : protected boolean isValidFragment (String fragmentName) . Добавил в MainActivity просто пустой метод и на выход true . Запустилось)
Спасибо, Вы помогли)

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 25 окт 2015, 14:51
Night_Scream
Привет, помогите советом.

Допустим есть 2 кнопки, я хочу менять настройки (текст,цвет текста) каждой из этих кнопок.
Кликнув по первой откроется активити с PreferenceFragment и в соответствующие поля уже чтобы были записаны текущие значения кнопки, если нужно поменял и после закрытия тут же принялись к кнопке на которую кликал.

Задача в целом тривиальная, как её решить? Как я понял PreferenceFragment заточен для настроек приложения в целом, а не отдельных его частей.

Спасибо всем откликнувшимся.

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 25 окт 2015, 15:02
doter.ua
Обычный SharedPreferences + примитивы: цвет - инт, текст -стринг

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 26 окт 2015, 08:19
Night_Scream
doter.ua писал(а):Обычный SharedPreferences + примитивы: цвет - инт, текст -стринг
SharedPreferences хранит в файле?

У меня динамически создаваемые кнопки, могут удаляться\добавляться произвольно, есть класс который расширяет кнопку в нем хранятся настройки кнопок у него сэтеры\гэтеры. Кнопок может быть 1, а может быть 20.
Еслиб были статические 2 кнопки уже б давно решил с SharedPreferences, а тут....

Просто надо вызвать активити (PreferenceFragment) с настройками и передать ему текущие значение запросив гетерами из класса кнопки, поправить настройки в фрагменте и после закрытия надо чтобы новые значения прописались сэтерами, реализовать то можно обычным активити, но как то не комильфо.

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 27 окт 2015, 11:52
Night_Scream
up, пацаны, какие варианты?

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 02 янв 2016, 20:45
vorskla
В эмуляторе (АПИ-16) код урока работает полностью, только браузер не открывает страницу.
На телефоне (АПИ-19) открывается только третий заголовок с настройками дисплея, на первом и втором ошибка.

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 23 авг 2016, 00:49
vd.basik
Здравствуйте!
Есть вопрос по данной теме. Набросал пример, но появилась проблема - не переходит на новый скрин с фрагментом, возможно сможете помочь
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();
    }
}
MainPreferenceFragment

Код: Выделить всё

public class MainPreferenceFragment extends PreferenceFragment
{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.main_preference_layout);
    }
}
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>
EventsPreferenceFragment

Код: Выделить всё

public class EventsPreferenceFragment extends PreferenceFragment
{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.events_preference_layout);
    }
}
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>
Не переходит на EventsPreferenceFragment. Даже уже не знаю в чем проблема. Виден клик но результата никакого.
Заранее спасибо

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 02 июн 2017, 07:03
EvgenSolovev
vorskla писал(а):В эмуляторе (АПИ-16) код урока работает полностью, только браузер не открывает страницу.
На телефоне (АПИ-19) открывается только третий заголовок с настройками дисплея, на первом и втором ошибка.
Чтобы заработало, добавьте в MainActivity метод:

Код: Выделить всё

protected boolean isValidFragment (String fragmentName){
        return true;
    }
А для того, чтобы открывалась страница, видимо, нужно добавить соответствующие разрешения в MANIFEST

Re: Урок 111. Android 3. Fragments. PreferenceFragment - нас

Добавлено: 31 июл 2019, 12:48
slaveta84
Tabun писал(а):
07 апр 2014, 19:44
С телефона запустилась, а с планшета нет. Попросила метод : protected boolean isValidFragment (String fragmentName) . Добавил в MainActivity просто пустой метод и на выход true . Запустилось)
Спасибо, помогло.
Вставил в MainActivity пустой метод и всё заработало

@Override
protected boolean isValidFragment(String fragmentName) {
return true;
}