#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 (), и это дало дополнительную ошибку.