Как добавить домашний фрагмент в приложение в Android Studio

#java #android #android-studio

Вопрос:

Добрый день, пожалуйста, я хочу добавить фрагмент домашней страницы, который отображается как фрагмент по умолчанию, когда я открываю свое приложение, но я не знаю, как это сделать. Я создал xml-файлы домашнего фрагмента и файлы java, но я не знаю, что делать, чтобы отобразить их при запуске. Это код в моем основном файле действий и ошибка, которую я получил, когда попытался вставить домашний фрагмент:

 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){

        }
    }*/
    }
 

Любая помощь будет искренне признательна

Ответ №1:

Пожалуйста, проверьте свой класс HomeFragment, в методе переопределения 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;
}
 

Комментарии:

1. Хороший день. Я сделал это, но у меня все еще та же ошибка из loadFragment(новый домашний фрагмент());

Ответ №2:

Я думаю, что это происходит из-за того, что вы используете getSupportFragmentManager() вместо getFragmentManager()

Пожалуйста, измените свой метод loadFragment ().

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

    }
 

Для

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

    }
 

Когда вы используете android.support.v4.app.FragmentManager , то вы должны использовать getSupportFragmentManager() , и если вы используете android.app.FragmentManager , то используйте getFragmentManager()

Комментарии:

1. Я сделал это, но это также повлияло на мой общедоступный логический метод onNavigationItemSelected (), и это дало дополнительную ошибку.