显示MyFragment到MainActivity

时间:2018-06-30 23:11:38

标签: java android android-fragments

我有两个java类。一个是fullname,另一个是main activityMyFragment包含具有地图的片段。我想将此显示在我的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

}

如何组合两个类,以便我的主要活动显示此片段。 如何使用MyFragment进行mainActivity?

2 个答案:

答案 0 :(得分:1)

在您的Activity中声明一个成员字段,例如

private MyFragment fragment;

onCreate()中将其初始化:

fragment = MyFragment();

然后附加并显示它:

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

container是应使用Fragment内容替换的版式ID。

编辑:在我看来,您使用了Android Studio的“导航抽屉活动”模板。正确的布局文件应为content_main.xml(如果您尚未更改该部分)。您可以将内容布局添加到由AS生成的ConstraintLayout内:

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

请注意,使用静态工厂方法进行Fragment实例化是一种更好的方法,请检查this question以获得更多背景信息。

答案 1 :(得分:0)

首先,您必须在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,应在其中放置片段,由资源ID指定,第二个参数是要添加的片段。