Программно добавляем фрагмент в framelayout в Android

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

В моем основном макете деятельности я использую FrameLayout:

<FrameLayout
        android:id="@+id/mainframe"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:layout_below="@id/topsection"
        android:layout_above="@id/lowersection" />

У меня есть фрагмент, объявленный как таковой:

public class MyFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragmentlayout, container, false);
    }
}

Затем в моей основной деятельности (которая расширяет FragmentActivity и использует импорт android.support.v4.app.FragmentActivityЯ пытаюсь загрузить этот фрагмент в макет кадра.

MyFragment myf = new MyFragment();

FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(R.id.mainframe, myf);
transaction.commit();

Я следовал за этим из многих других примеров, однако я получаю сообщение об ошибке компилятора на transaction.add() команда, с которой никто, кажется, еще не сталкивался.

Я получаю ошибку: The method add(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, MyFragment),

Почему это? MyFragment класс расширяется Fragment так что я бы подумал, что это сработает. Что я делаю неправильно?

Изменить: импорт для моей основной деятельности:

import org.joda.time.DateTime;
import android.app.FragmentTransaction;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

1 ответ

Решение

Проверьте ваш импорт. использование android.support.v4.app.FragmentTransaction вместо android.app.FragmentTransaction,

Кроме того, убедитесь, что вы используете android.support.v4.app.Fragment и звонит getSupportFragmentManager(), Это легко пропустить эти звонки / импорт. Спасибо saiful103a с подсказкой FragmentManager.

Другие вопросы по тегам