Как вызвать onCreateView отдельного класса Fragement в классе MainActivity?

Помогите мне, пожалуйста. Я хочу показать список класса фрагмента в MainActivity. Я пытаюсь в основной деятельности new (); но он показывает пустую страницу, но когда я помещаю все данные в mainActivity и запускаю, то он показывает список данных. На самом деле, я хочу узнать, как перевести этот метод из другого класса в mainacctivity.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        new ForecastFragment();
    }


//----------------- A Separate ForecastFragment Class ------ 

public class ForecastFragment extends Fragment {

    public ForecastFragment() {

    }
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        String[] data={
                "Sunday",
                "Monday",
                "Tuesday",
                "Wednesday",
                "Thursday",
                "Friday",
                "Saturday"
        };
        ArrayAdapter<String> adapter;
        View rootView=inflater.inflate(R.layout.list_item_forecast,container,false);

        ListView listView =(ListView)rootView.findViewById(R.id.listview);
        List<String> listData=new ArrayList<String>(Arrays.asList(data));
        adapter=new ArrayAdapter<String>(
                getActivity(),R.layout.list_item_forecast,R.id.textView,listData);
        listView.setAdapter(adapter);
        return rootView;
    }
}

2 ответа

Решение

В вашем MainActivity layout file, вы должны иметь FrameLayout который будет содержать ваш фрагмент.

<FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

Теперь в вашем MainActivity класс, вы будете создавать экземпляр своего фрагмента следующим образом:

 getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment_container, new ForecastFragment(), ForecastFragment.class.getSimpleName()).commit();

Вы можете создать свой фрагмент, как указано выше, в любой точке вашего MainActivity учебный класс. В вашем случае вы должны сделать это в MainActivity's onCreate()

Если вы не хотите использовать библиотеку версий поддержки Android, вы можете использовать:

 getFragmentManager().beginTransaction()
                    .add(R.id.fragment_container, new ForecastFragment(), ForecastFragment.class.getSimpleName().commit();

Вы не можете просто создать экземпляр фрагмента, вызвав new, вы должны добавить его в стек:

getFragmentManager()
    .beginTransaction()
    .add(R.id.container, new ForecastFragment(), "fragment_tag")
    .commit();

Где R.id.container - это контейнер в вашем макете (обычно это FrameLayou) для хранения вашего фрагмента.

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