我想向用户显示一个片段,而不是显示的当前片段。
几天来我一直在与Fragment Managers和Fragment Transactions纠缠不清,我听不懂。 请有人用简单的英语帮助我,如何做。我已经收到了代码示例和所有内容,这非常令人沮丧。请我要求您,我只希望fragmentRegister消失,而fragment Login显示textViewLogin的onClick。
这是代码
RegisterFragment.java
public class RegisterFragment extends Fragment implements View.OnClickListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
v = inflater.inflate(R.layout.fragment_register, container, false);
.........
@Override
public void onClick(View view) {
if(view == textViewLogin)
return inflater.inflate(R.layout.fragment_login, container, false);
}
}
我不知道是否需要,但是这里是Main Activity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final DrawerLayout drawerLayout = findViewById(R.id.drawerLayout);
findViewById(R.id.imageMenu).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
drawerLayout.openDrawer(GravityCompat.START);
}
});
NavigationView navigationView = findViewById(R.id.navigationView);
navigationView.setItemIconTintList(null);
NavController navController = Navigation.findNavController(this, R.id.navHostFragment);
NavigationUI.setupWithNavController(navigationView, navController);
}
}
答案 0 :(得分:2)
将Framelayout放入您的 MainActivity 中,默认设置的可见性消失了。
当用户单击您的 textViewLogin ,然后看到该框架布局并设置您的 loginfrgament 时,就像下面的代码
@Override
public void onClick(View view) {
if(view == textViewLogin){
containerView.setVisibility(VISIBLE);
LoginFragment fragment=new LoginFragment()
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().add(R.id.containerView,fragment).addToBackStack("login").commit();
//here R.id.containerView is id of your frameLayout.
}
}
答案 1 :(得分:1)
使用androidx,您可以使用navigation。就像IOS中的情节提要一样。您在res navigation folder under res/下进行文件夹导航 在内部制作一个导航图,在其中放置并连接片段。
在活动布局中,您放置片段布局:
<fragment
android:id="@+id/frame_layout"
android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"
app:navGraph="@navigation/before_offer_navigation"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/bottom_navigation_menu"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
默认情况下,将显示导航图中的第一项。 然后在片段onViewCreated中初始化navController
private lateinit var navController: NavController
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
navController = Navigation.findNavController(view)
}
之后,片段之间的导航就像
一样容易navController.navigate(R.id.action_fragment1_to_fragment2)
您可以在navGraph-> text->操作中找到的ID
<fragment
android:id="@+id/fragment1"
android:name="com.example.mark7.Fragment1"
android:label="Fragment1">
<action
android:id="@+id/action_fragment1_to_fragment2"
app:destination="@id/fragment2" />
</fragment>