2015-06-21 3 views
1

У меня есть PreferenceActivity, которые добавляют PreferenceFragment через заголовки:findFragmentById или findFragmentByTag для PreferenceFragment

public class SettingsActivity extends PreferenceActivity { 
... 

@Override 
public void onBuildHeaders(List<Header> target) { 
    loadHeadersFromResource(R.xml.pref_headers, target); 
} 
... 
} 

Теперь мне нужно вызвать метод PreferenceFragment от PreferenceActivity, но я не могу использовать Fragment fragment = getFragmentManager.findFragmentByTag("tagfragment");, потому что с помощью заголовков для добавления PreferenceFragment I не знают TAG или идентификатор, присвоенный фрагменту.

Как я могу решить?

[РЕШИТЬ]

решаемые с помощью этого метода: https://stackoverflow.com/a/18005721/570488

+0

Почему бы не использовать PreferenceFragment + iterface для обработки связи? Я сделал это недавно. – Xplouder

+0

Я обычно использовал интерфейс для общения от фрагмента к активности. Но мне нужно общаться от активности до фрагмента. – Simone

+0

Я вижу ... в этом случае попробуйте это решение: http://stackoverflow.com/questions/8348078/how-do-i-access-preferencefragment-by-id – Xplouder

ответ

-1

Убедитесь в том, PreferenceActivity уже загружен при вызове этого:

MyPreferenceFragment frag = (MyPreferenceFragment) getFragmentManager().findFragmentById(android.R.id.content); 

MyPreferenceFragment следует заменить на свое собственное имя класса PreferenceFragment ,

+0

та же проблема: frag is null. Чтобы лучше понять, я пытаюсь использовать биллинг in-app из PreferenceFragment, используя второй метод этого сообщения: http://stackoverflow.com/a/14131852/570488 Итак, из PreferenceActivity мне нужно позвонить: FragmentManager fragmentManager = getSupportFragmentManager(); Фрагмент фрагмента = фрагментManager.findFragmentByTag ("YourTag"); if (фрагмент! = Нуль) { ((MyFragmentWithIabHelper) фрагмент) .onActivityResult (requestCode, resultCode, data); } Но я не знаю идентификатора или тега PreferenceFragment ... – Simone

+0

Вы пытались андроид.R.id.content, как я уже сказал на ответ? – Xplouder

+0

этот идентификатор указывает на корневой вид активности, который в вашем случае должен быть PreferenceFragment, не так ли? так что вместо findFragmentByTag используйте findFragmentById – Xplouder