Android studio — не удается запустить новое действие, используя намерение

#android-studio

#android-studio

Вопрос:

Я работаю над приложением Android Studio, и я только что создал строку меню с тремя вариантами. Сейчас я пытаюсь загрузить новое действие, когда выбраны пункты меню. Проблема, с которой я сталкиваюсь: при нажатии на пункт меню открывается пустое действие, а не фрагмент, который я выбрал.

Это то, что я сделал:

  1. созданы классы Java и страницы XML для каждого соответствующего пункта меню.

Я покажу код только для моего основного действия и одной из новых страниц действий, которые я создал.

     friendListFragment.java

This is a new java class I created
    package com.example.assignment1;

import android.text.Layout;
import android.view.LayoutInflater;
import android.view.View;
import android.os.Bundle;
import android.view.ViewGroup;
import android.view.View;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;

public class friendListFragment extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
    }
}
  

и затем в моем основном файле activity у меня есть следующее

 package com.example.assignment1;

import androidx.annotation.NonNull;
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 android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.os.Bundle;
import android.view.View;
import android.view.Menu;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.navigation.NavigationView;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

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

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
    private DrawerLayout drawer;

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

        Toolbar toolbar = findViewById(R.id.toolBar);
        setSupportActionBar(toolbar);

        drawer = findViewById(R.id.drawer_layout);
        NavigationView navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
                R.string.navigation_drawer_open,R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();
    }
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item ){
        Intent intent = null;
        switch (item.getItemId()){
            case R.id.viewFriendList:
                intent = new Intent(this,friendListFragment.class);
                startActivity(intent);
                break;
            case R.id.toDoList:
                intent = new Intent(this,toDoListFragment.class);
                startActivity(intent);
                break;
            case R.id.eventList:
                intent = new Intent(this,eventFragment.class);
                startActivity(intent);
                break;
            default:
                return super.onOptionsItemSelected(item);
        }
        drawer.closeDrawer(GravityCompat.START);

        return true;
    }


    @Override
    public void onBackPressed() {
        if (drawer.isDrawerOpen(GravityCompat.START)){
            drawer.closeDrawer(GravityCompat.START);
        }
        else
        {
            super.onBackPressed();
        }

    }

}
  

Я создал это из пустого действия, когда я не нажимаю ни на какие параметры меню, строка меню отображается правильно. Кроме того, я думаю, что ошибка в onNavigationItemSelected функции.

это ошибка, которую я получаю в своем logcat

 08-14 15:45:27.834 6816-6833/com.example.assignment1 E/Surface: getSlotFromBufferLocked: unknown buffer: 0xae613460
  

и это мой файл манифеста

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.assignment1">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
<activity android:name=".friendListFragment"></activity>
            <activity android:name=".toDoListFragment"></activity>
            <activity android:name=".eventFragment"></activity>
    </application>

</manifest>
  

В принципе, когда я нажимаю на опцию в строке меню, она загружает пустую страницу

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

1. Что за исключение? Вы добавили действие в свой файл манифеста?

2. @Ezio я обновил свой пост, включил исключение и файл манифеста

Ответ №1:

В вашем friendListFragment вы не устанавливаете макет contentView, поэтому он выдает пустую страницу

 public class friendListFragment extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Set your contentView like this 
         setContentView(R.layout.activity_friend_list_fragment); 
        
    }
}
  

Примечание: activity_friend_list_fragment — это просто пример, вам нужно
замените его своим файлом макета