简体   繁体   English

如何在 Android Studio 中将 home 片段添加到应用程序

[英]How to add a home fragment to app in Android Studio

Good Day, Please I want to add a home fragment that displays as the default fragment when I open my app but I don't know how to go about this.美好的一天,请我想添加一个主页片段,当我打开我的应用程序时显示为默认片段,但我不知道如何 go 解决这个问题。 I have created the home fragment xml and java files but I don't know what to do to display it on startup.我已经创建了主片段 xml 和 java 文件,但我不知道如何在启动时显示它。 This is the code in my main activity file and the error I received when I tried to insert the home fragment:这是我的主要活动文件中的代码,也是我尝试插入主片段时收到的错误:

Invalid method declaration; return type required
package com.example.anjieapp;

import android.os.Bundle;
import android.view.MenuItem;
import android.widget.FrameLayout;

import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;

import com.google.android.material.navigation.NavigationView;

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    private Toolbar toolbar;
    private DrawerLayout drawerLayout;
    private NavigationView navigationView;
    FrameLayout frameLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        toolbar = findViewById(R.id.main_toolbar);
        setSupportActionBar(toolbar);

        drawerLayout = findViewById(R.id.drawer_layout);
        navigationView = findViewById(R.id.nav_view);
        frameLayout = (FrameLayout) findViewById(R.id.frame);

        ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(
                this,
                drawerLayout,
                toolbar,
                R.string.openNavDrawer,
                R.string.closeNavDrawer

        );
        drawerLayout.addDrawerListener(actionBarDrawerToggle);
        actionBarDrawerToggle.syncState();
        navigationView.setNavigationItemSelectedListener(this);

    }





loadFragment(new homeFragment());
    @Override

    public boolean onNavigationItemSelected(MenuItem menuItem) {
        int id = menuItem.getItemId();
        if (id == R.id.about_data) {
            loadFragment(new frag1());
        }
        else if (id == R.id.data_visual) {
            loadFragment(new frag2());
        }
        else if (id == R.id.about_app) {
            loadFragment(new frag3());
        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }


    @Override
    public void onBackPressed() {
        if(drawerLayout.isDrawerOpen(GravityCompat.START)) {
            drawerLayout.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }
    public void loadFragment(Fragment fragment) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.frame, fragment);
        transaction.commit();

    }

        /*@Override
        public void onPointerCaptureChanged ( boolean hasCapture){

        }
    }*/
    }

Any help would be sincerely appreciated任何帮助将不胜感激

Please check your homeFragment class, in onCreateView override method must be return view like this:请检查您的 homeFragment class,在 onCreateView 覆盖方法中必须像这样返回视图:

@Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    // Creating view corresponding to the fragment
    View v = inflater.inflate(R.layout.alert_fragment, container, false);
    return v;
}

I think this is happening cause of you use getSupportFragmentManager() instead of getFragmentManager()我认为这是因为您使用getSupportFragmentManager()而不是getFragmentManager()

Please change your loadFragment() method.请更改您的 loadFragment() 方法。

  public void loadFragment(Fragment fragment) {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.frame, fragment);
        transaction.commit();

    }

To

  public void loadFragment(Fragment fragment) {
        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        transaction.replace(R.id.frame, fragment);
        transaction.commit();

    }

When you are using android.support.v4.app.FragmentManager then you should use getSupportFragmentManager() and if you are using android.app.FragmentManager then use getFragmentManager()当您使用android.support.v4.app.FragmentManager时,您应该使用getSupportFragmentManager()如果您使用的是android.app.FragmentManager然后使用getFragmentManager()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM