【问题标题】:How to move to fragment from activity in my case在我的情况下如何从活动转移到片段
【发布时间】:2019-10-27 00:09:44
【问题描述】:

我想通过单击活动中的按钮转到主屏幕。问题是HomeActivity有BottomNavigation,分成4个片段 我不想显示第一个“HomeFragment” 我想展示的片段是 ProfileFragment 如何让 ProfileFragment 屏幕出现?

我已经搜索过了,但在我的情况下有点不同

这是我的 A 活动

backTo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           Intent intent  = new Intent(PetHotelActivity.this, HomeActivity.class);
           startActivity(intent);

        }
    });

这是我的家庭活动

public class HomeActivity extends AppCompatActivity {
BottomNavigationView bottomNavigationView;
Fragment seletedFragment = null;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);




    bottomNavigationView = findViewById(R.id.bottom_navigation);

    bottomNavigationView.setOnNavigationItemSelectedListener(navigationItemSelectedListener);

    Bundle intent = getIntent().getExtras();
    if (intent != null){
        String publisher = intent.getString("publisherid");

        SharedPreferences.Editor editor = getSharedPreferences("PREFS", MODE_PRIVATE).edit();
        editor.putString("profileid", publisher);
        editor.apply();

        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, new ProfileFragment()).commit();

    } else{

        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, new HomeFragment()).commit();

    }

}

private BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener =
        new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

                switch (menuItem.getItemId()){
                    case R.id.nav_bottomBar_home:
                        seletedFragment = new HomeFragment();
                        break;

                    case R.id.nav_bottomBar_search:
                        seletedFragment = new SearchFragment();
                        break;

                    case R.id.nav_bottomBar_notification:
                        seletedFragment = new NotificationFragment();
                        break;


                    case R.id.nav_bottomBar_profile:
                        SharedPreferences.Editor editor = getSharedPreferences("PREFS", MODE_PRIVATE).edit();
                        editor.putString("profileid", FirebaseAuth.getInstance().getCurrentUser().getUid());
                        editor.apply();
                        seletedFragment = new ProfileFragment();
                        break;



                }

                if (seletedFragment != null){
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, seletedFragment).commit();
                }

                return true;
            }
        };

我想从 A 活动移动到显示 ProfileFragment 我怎样才能做到这一点? 在那种情况下,当我单击按钮时 移至 HomeFragment...

【问题讨论】:

    标签: android layout fragment


    【解决方案1】:

    将标志传递给意图并进入活动

    backTo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               Intent intent  = new Intent(PetHotelActivity.this, HomeActivity.class);
               intent.putextra("flag","flag");
               startActivity(intent);
    
            }
        });
    

    现在在oncreate()

    if (intent != null){
            String flag= intent.getString("flag");
            if(flag.equalsIgnorecase("flag")){
     getSupportFragmentManager().beginTransaction()
                    .replace(R.id.fragment_container, new ProfileFragment ()).commit();
    }
    }
    

    希望对你有帮助!

    【讨论】:

    • 对不起.. 我可以再问一个吗?如果想显示 SearchFragment(当我单击该按钮时)它无法正常工作.. 有什么问题?
    • 在replace mtehod的第二个参数中替换你的ProfileFragment ()SearchFragment()片段。
    • 点击后,您可以随意替换片段。就像我在我的帖子中所做的那样,你只需要替换片段。
    • 实际上在我使用时发生了一些事情,我不知道为什么..当我使用您的代码显示错误时,此过程:com.example.blogapp,PID:19440 java.lang.NullPointerException:尝试在 com.example.together.Fragment.ProfileFragment$9.onDataChange(ProfileFragment.java:277)
    【解决方案2】:

    您可以在BottomNavigationView 中设置默认的选定项 ID。

    你可以这样做:

    bottomNavigationView.setSelectedItemId(R.id.idOfItemYouWantSelected);
    

    因此,您需要将代码更改为:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        bottomNavigationView = findViewById(R.id.bottom_navigation);
    bottomNavigationView.setOnNavigationItemSelectedListener(navigationItemSelectedListener);
        bottomNavigationView.setSelectedItemId(R.id.nav_bottomBar_profile);
    }
    

    使用此代码,您的个人资料片段将在活动打开时自动选择。

    此外,您可以使用相同的方法选择您想要的任何片段。

    您可以通过Intent 从您的Activity 传递片段的任何唯一名称,然后在您的onCreate() 中,您可以查看要选择哪个Fragment,例如,

    if(getIntent().getStringExtra("which_fragment_to_select").equals("profile")){
        navigationView.setSelectedItemId(R.id.idOfItemYouWantSelected);
    }else if(....){ ... }
    

    【讨论】:

    • 非常感谢你~
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多