0

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

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; 
    } 
} 

ответ

0

В вашем 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(); 
+0

Спасибо г-ну Шадабу Ансари, после того, как ForecastFragment.getClass изменится на ForecastFragment.class и добавит .cummit(); чем это работает. Теперь это работает. :) – Santosh

+0

О да, я пропустил добавление commit(). Спасибо, что заметили это. Отредактировал мой ответ на будущее. –

0

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

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

Где R.id.container находится контейнер в макете (как правило, FrameLayou), чтобы удерживать фрагмент.

+0

Спасибо Это работает. вот мой код: getFragmentManager() .beginTransaction() .add (R.id.fragment_container, новый ForecastFragment(), ForecastFragment.class.getSimpleName()) .commit(); – Santosh