Display MyFragment to MainActivity

Multi tool use
Multi tool use


Display MyFragment to MainActivity



I have two java classes. One is main activity and other is MyFragment. MyFragment contains a fragment which has a map. I want to display this to my MainActivity. MainActivity Consists of a Navigation Drawer activity. my code for both the classes are:


main activity


MyFragment


MyFragment


MainActivity


MainActivity


`public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();

NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}

@Override
public void onBackPressed() {
DrawerLayout drawer = findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

int id = item.getItemId();


if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();

if (id == R.id.nav_loc) {

} else if (id == R.id.nav_set) {

} else if (id == R.id.nav_info) {

} else if (id == R.id.nav_abt) {

}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}



}
`



And MyFragment Code is:


MyFragment


public class MyFragment extends Fragment implements OnMapReadyCallback {
GoogleMap mgoogleMap;
MapView mapView;
View view;
public MyFragment(){

}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);}
@Override
public View onCreateView(LayoutInflater inflater , ViewGroup container, Bundle savedInstanceState){
view = inflater.inflate(R.layout.content_main,container , false);
return view;
}

@Override
public void onViewCreated(View view,Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mapView = view.findViewById(R.id.map);
if(mapView!=null)
mapView.onCreate(null);
mapView.onResume();
mapView.getMapAsync(this);
}

@Override
public void onMapReady(GoogleMap googleMap){
MapsInitializer.initialize(getContext());
mgoogleMap = googleMap;
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
googleMap.addMarker(new MarkerOptions().position(new LatLng(23.2599,77.4126)).title("BHOPAL"));
CameraPosition bhopal = CameraPosition.builder().target(new LatLng(23.2599,77.4126)).zoom(16).bearing(0).build();
googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(bhopal));
}



}



How can I combine both the classes so that My main activity shows this fragment.
How can I use MyFragment to mainActivity?




2 Answers
2



Declare a member field in your Activity like


Activity


private MyFragment fragment;



initialize it in onCreate():


onCreate()


fragment = MyFragment();



Then attach and show it:


getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment, "your_tag").commit()



Where container is the id of the layout that should be replaced with your Fragment's content.


container


Fragment



Edit: it seems to me that you used the Android Studio's "Navigation Drawer Activity" template. The correct layout file would be content_main.xml (if you haven't changed that part). You could add your content layout inside the ConstraintLayout that was generated by AS:


content_main.xml


ConstraintLayout


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



Note that it would be a better approach to use a static factory method for Fragment instantiation, check this question for more background.





Yes, my Fragment is in content_main.xml .
– aditya kumar singh
Jun 30 at 23:35






Thank you. you made it look very easy.:)
– aditya kumar singh
Jun 30 at 23:50



First, you have to add a container in main_activity.xml :


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
</LinearLayout>
</RelativeLayout>



Then in your MainActivity.java, add this in onCreate (or wherever you want):


FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
MyFragment myFragment = new MyFragment();
fragmentTransaction.add(R.id.fragment_container, myFragment, "HELLO");
fragmentTransaction.commit();



The first argument passed to add() is the ViewGroup in which the fragment should be placed, specified by resource ID, and the second parameter is the fragment to add.


add()


ViewGroup






By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

HdQuXpmr aP3dEGrNEMjId fd2d BQufNaJmu,Fe3gUforQhNo9q,5
Q3 9 A0x9y6fyOou 09UIsYOWpeeg

Popular posts from this blog

PySpark - SparkContext: Error initializing SparkContext File does not exist

django NoReverseMatch Exception

List of Kim Possible characters