Как вызвать 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) для хранения вашего фрагмента.