Как получить FragmentManager по идентификатору просмотров? - PullRequest
3 голосов
/ 21 декабря 2011

Как я могу получить FragmentManager представления?

Предполагая, что у меня есть макет, подобный следующему:

<?xml version="1.0" encoding="utf-8"?>
...
<fragment android:name="com.example.MyFragment"
        android:id="@+id/thefragmentsid" >
</fragment>
...

Вот мой псевдокод (я знаю, что даже не FragmentView существует, но я думаю, вы понимаете, о чем я)

FragmentView fw = (FragmentView) activity.findViewById( R.id.thefragmentsid );
FragmentManager goal = fw.getFragment().getFragmentManager();

А вот пример использования:

public class MyFragment extends Fragment{
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate( R.layout.my_fragments_view, container, false );
    }
}

public class MainActivity extends FragmentActivity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        findViewById( R.id.thefragmentsid ).setOnTouchListener( new OnTouchListener(){
            @Override
            public boolean onTouch( View v, MotionEvent event ){
                FragmentView fw = (FragmentView) findViewById( R.id.thefragmentsid );
                FragmentManager fm = fw.getFragment().getFragmentManager();
                // Do something with the fragment manager
                return false;
            }
        } );
    }
}

РЕДАКТИРОВАТЬ: Я не знаюиметь доступ к любому Fragment -объекту любым способом, который я знаю.Возможно, есть скрытый способ, но именно об этом я и спрашиваю!

СЛЕДУЮЩАЯ РЕДАКТИРОВКА: (просто чтобы завершить вопрос позже) Я использую пакет поддержки Google!

PS: Я не хочу давать слишком много информации, потому что это общий вопрос, который требует общего ответа и может иногда появляться.

Ответы [ 2 ]

3 голосов
/ 30 декабря 2011

Хорошо, это действительно моя собственная ошибка, я вижу. Я подумал, что это должна быть функция с именем getFragmentManager(), но это была именно ошибка.

Правильная функция называется getSupportFragmentManager(), поскольку я использую пакет поддержки Googles.

Но нужно сказать, что существует большая ловушка, потому что внутри Fragment даже с пакетом поддержки можно использовать функцию Fragment s getFragmentManager(), но внутри FragmentActivity это внезапно getSupportFragmentManager().

Я признаю, что это позор, тем более, что я думал, что это не будет необходимой информацией, что я использую пакет поддержки. Я думал, что это сделает вопрос более общим, но я вижу, что никогда не должен хранить какую-либо информацию. Для будущих вопросов:)

0 голосов
/ 21 декабря 2011

http://developer.android.com/guide/topics/fundamentals/fragments.html

Создайте свои фрагменты в коде и присвойте им вид так же, как вы присваиваете вид деятельности.Чтобы добавить фрагмент в XML, используйте фрагмент, который вы создали в коде.

т.е.* Теперь, когда у вас есть фрагмент кода, вы можете использовать:

getActivity().getFragmentManager();

getActivity - сокращение, чтобы получить Activity, к которому принадлежит Fragment.Возможно, Fragment не присоединен к Activity.

. Из-за этого подождите, пока onActivityCreated, или посмотрите, имеет ли getActivity значение null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...