0

Please Help me. I want to show Fragment class List into MainActivity. I try in main activity new (); but It show blank page, but when I put all data into mainActivity and run then it show list of data. Actually, I want to learn how to get this method from other class into 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;
    }
}
Nikita
  • 6,101
  • 2
  • 26
  • 44
Santosh
  • 227
  • 1
  • 4
  • 18

2 Answers2

0

You can't just instantiate a fragment by calling new, you have to add it to the stack:

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

Where R.id.container is the container in your layout (usually a FrameLayou) to hold your fragment.

Francesc
  • 25,014
  • 10
  • 66
  • 84
  • Thanks It works. here is my code : getFragmentManager() .beginTransaction() .add(R.id.fragment_container, new ForecastFragment(), ForecastFragment.class.getSimpleName()) .commit(); – Santosh Mar 01 '16 at 22:52
0

In your MainActivity layout file , you should have a FrameLayout which will contain your fragment.

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

Now in your MainActivity class, you'll instantiate your Fragment like this :

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

Your can instantiate your fragment as above at any point in your MainActivity class. In your case, you should do that in MainActivity's onCreate()

If you don't want to use Android support version library, you can use :

 getFragmentManager().beginTransaction()
                    .add(R.id.fragment_container, new ForecastFragment(), ForecastFragment.class.getSimpleName().commit();
Shadab Ansari
  • 7,022
  • 2
  • 27
  • 45
  • Thanks Mr. Shadab Ansari, After ForecastFragment.getClass change into ForecastFragment.class and adding .cummit(); than it works. Now it works. :) – Santosh Mar 01 '16 at 22:56
  • Oh yes, I missed adding commit(). Thanks for noticing it. Edited my answer for future. – Shadab Ansari Mar 01 '16 at 23:10