Показать MyFragment для MainActivity - PullRequest
0 голосов
/ 01 июля 2018

У меня есть два класса Java. Один - 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;
}

} `

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

}

Как я могу объединить оба класса, чтобы мой основной вид деятельности показал этот фрагмент. Как я могу использовать MyFragment для mainActivity?

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Сначала вы должны добавить контейнер в 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>

Затем в свой MainActivity.java добавьте это в onCreate (или куда хотите):

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

Первый аргумент, переданный add(), - это ViewGroup, в который должен быть помещен фрагмент, заданный идентификатором ресурса, а вторым параметром является добавляемый фрагмент.

0 голосов
/ 01 июля 2018

Объявите поле участника в вашем Activity как

private MyFragment fragment;

инициализировать его в onCreate():

fragment = MyFragment();

Затем прикрепите и покажите:

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

Где container - это идентификатор макета, который должен быть заменен содержимым вашего Fragment.

Редактировать : мне кажется, что вы использовали шаблон «Навигационный ящик» в Android Studio. Правильный файл макета будет content_main.xml (если вы не изменили эту часть). Вы можете добавить свой макет контента в ConstraintLayout, который был сгенерирован AS:

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

Обратите внимание, что было бы лучше использовать статический метод фабрики для создания экземпляра фрагмента, отметьте этот вопрос для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...