Может ли фрагмент расширить активность фрагмента? [Андроид]

Я создал MainActivity, который состоит из 3 прокручиваемых вкладок (с помощью ViewPager). Теперь каждая из этих 3 вкладок является фрагментом. Кроме того, я использую ActionBarSherlock (ABS).

Для первого фрагмента я создал следующий класс:

public class Fragment_1 extends SherlockFragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View v = inflater.inflate(R.layout.fragment1, container, false);
        return v;
        /* R.layout.fragment1 only contains a TextView. */
    }
}

Для второго фрагмента я хочу расширить FragmentActivity, как показано ниже.

public class Fragment_2 extends FragmentActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.fragment2);
        }
}

3-й фрагмент такой же, как и первый.

Но когда я запускаю приложение, оно вылетает. Итак, я ошибаюсь в расширении FragmentActivity для класса Fragment_2? Является ли незаконным расширение FragmentActivity или даже Activity для фрагментации классов? Если нет, то в чем здесь проблема?

Спасибо.


EDIT: После ответа @CommonsWare я обновил свой класс следующим образом:

public class Fragment_2 extends SherlockFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Button send = (Button) findViewById(R.id.bSend); //Error at this line
            //some error free code
            FragmentTransaction t = getSupportFragmentManager().beginTransaction(); //Error at this line
        }

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    View v = inflater.inflate(R.layout.fragment2, container, false);
    return v;
}

Мои последние два вопроса:

  1. Как мне получить доступ к моей кнопке R.id.bSend в классе Fragment_2.
  2. Eclipse предлагает изменить getSupportFragmentManager() на getFragmentManager(). С этим изменением все в порядке?

Спасибо!


person Born Again    schedule 01.07.2013    source источник


Ответы (1)


Является ли незаконным расширение FragmentActivity или даже Activity для фрагментации классов?

Fragment — это класс Java. Реализации ваших фрагментов (для использования в качестве страниц в вашем ViewPager) должны прямо или косвенно наследоваться от Fragment.

Activity не наследуется от Fragment. FragmentActivity не наследуется от Fragment. Следовательно, вы не можете наследовать от Activity или FragmentActivity и как-то также наследовать от Fragment.

person CommonsWare    schedule 01.07.2013
comment
@BornAgain: вы можете наследовать Fragment_2 от Fragment. Обратите внимание, что вы никогда не объясняли, почему хотите расширить FragmentActivity. - person CommonsWare; 02.07.2013
comment
Проблема в том, что внутри класса Fragment_2 мне нужно использовать setContentView(), для чего мне нужно расширить либо Activity, либо FragmentActivity. Но это невозможно. - person Born Again; 02.07.2013
comment
@BornAgain: мне нужно использовать setContentView() -- нет, не надо, так как это невозможно из файла Fragment. Используйте inflate() из onCreateView(), как в Fragment_1. - person CommonsWare; 02.07.2013
comment
Спасибо большое. Это решило это. Но теперь я столкнулся с еще двумя проблемами. Я был бы очень полезен, если бы вы взглянули на мой обновленный вопрос. - person Born Again; 02.07.2013
comment
@BornAgain: удалите свой метод onCreate(). Переместите логику Button в onCreateView() после inflate(), вызвав findViewById() на v, чтобы найти Button в раздутом View. И я понятия не имею, почему вы возитесь с FragmentTransaction внутри фрагмента. - person CommonsWare; 02.07.2013