我是android开发的新手,正在开发我的第一个应用程序,遇到了我所理解的一个非常简单的并发症,但是我似乎无法解决它,而且我获得的大多数在线资源跨已过时,并包括不推荐使用的方法。话虽如此,但问题所在:
在MainActivity.java中,我正在使用侧面抽屉导航,该导航使我可以在片段之间移动。这是代码:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch(item.getItemId()) {
case R.id.nav_home:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new HomeFragment()).commit();
break;
case R.id.nav_account:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new AccountFragment()).commit();
break;
case R.id.nav_goals:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new GoalsFragment()).commit();
break;
case R.id.nav_progress:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProgressFragment()).commit();
break;
case R.id.nav_food_diary:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new FoodDiaryFragment()).commit();
break;
case R.id.nav_nutrition:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new NutritionFragment()).commit();
break;
case R.id.nav_settings:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new SettingsFragment()).commit();
break;
}
drawer.closeDrawer(GravityCompat.START);
return true;
}
所有这些片段之间的导航非常完美。但是我的问题是,这些片段中的一个片段上存在一个按钮,我想用它带我到另一个片段,该片段无法通过导航抽屉访问。让我们称之为fragment_profile
。
可以通过单击按钮从现有片段导航到此新片段。
任何帮助将不胜感激。
答案 0 :(得分:2)
补充维卡斯所说的话。
他告诉我们,当您需要从“活动”转到“片段”时,您需要像下面的getSupportFragmentManager()
@Override
public void onClick(View view){
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
}
请注意,在这里我们需要如何为ProfileFragment()
传递类,其布局fragment_profile
将被自动加载,因为您将ProfileFragment()
设置为fragment_profile
接下来,您将来可能希望从一个Fragment
转到另一个getActivity()
,在这种情况下,您只需在getFragmentManager()
之前添加@Override
public void onClick(View view){
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
}
,这样它将变成
$this->validate($request, [
'user_photo' => 'sometimes|required|mimes:jpeg,jpg,png,gif,svg|max:5000',
]);
if($request->hasFile('user_photo')){
$photo_file = $request->file('user_photo');
$photo_filename = 'dp_' . $user_id . '.' . $photo_file->getClientOriginalExtension();
$photo_path = $request->file('user_photo')->move(public_path('DP/'), $photo_filename);//Your image save in public/DP folder
$userModel->display_image_path = $photo_path;
}
答案 1 :(得分:1)
要将片段放在屏幕上,您只需要一个fragmentmananger。正如您在代码中看到的那样,当单击导航中的一个选项然后致电时,您的更改方式
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new SettingsFragment()).commit();
将现有片段替换为所选片段。用户单击如下按钮时完全相同。
//your click listener callback
@Override
public void onClick(View view){
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
}
您唯一需要注意的是主机应该具有片段容器fragment_container
。