Намерение во фрагменте продолжает сбой с манифестом, студия Android

я получаю сообщение об ошибке

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.tulio.appkolev/com.example.tulio.appkolev.fragments.registerFragment}; have you declared this activity in your AndroidManifest.xml?

Посмотрев в Интернете и перепробовав несколько страниц, я не смог найти решение.

Основы таковы: у меня есть этот макет для входа в приложение, в конце страницы у меня есть ссылка для создания учетной записи. При нажатии приложение вылетает и показывает мне эту ошибку

Я уверен, что код не соответствует стандартам

основной

package com.example.tulio.appkolev;


public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener  {

private final AppCompatActivity activity = MainActivity.this;

    private DrawerLayout drawer;
    private InputValidation inputValidation;
    private DatabaseHelper databaseHelper;


    @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_close, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        if (savedInstanceState==null){
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new loginFragment()).commit();
        navigationView.setCheckedItem(R.id.account);

        }
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        switch (menuItem.getItemId()){
            case R.id.settings:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new settingsFragment()).commit();
                break;
            case R.id.account:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new loginFragment()).commit();
                break;
            case R.id.assignments:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new assigmentsFragment()).commit();
                break;
        }
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

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

    }

    private void initObjects(){
        databaseHelper = new DatabaseHelper(activity);
        inputValidation = new InputValidation(activity);
    }
    }

класс входа

package com.example.tulio.appkolev.fragments;


import com.example.tulio.appkolev.R;
import com.example.tulio.appkolev.helper.InputValidation;
import com.example.tulio.appkolev.sql.DatabaseHelper;


public class loginFragment extends Fragment implements View.OnClickListener {

    private final Fragment fragment = loginFragment.this;
    private NestedScrollView nestedScrollView;
    private TextInputLayout input_email;
    private TextInputLayout input_password;
    private TextInputEditText input_edit_email;
    private TextInputEditText input_edit_password;
    private AppCompatButton button_login;
    private AppCompatTextView registerLink;
    private InputValidation inputValidation;
    private DatabaseHelper databaseHelper;

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

        View v = inflater.inflate(R.layout.fragment_login, container, false);

      //   initObjects();

        button_login = (AppCompatButton) v.findViewById(R.id.button_login);
        button_login.setOnClickListener(this);
        registerLink = (AppCompatTextView) v.findViewById(R.id.registerLink);
        registerLink.setOnClickListener(this);
        nestedScrollView = (NestedScrollView) v.findViewById(R.id.nestedScrollView);
        input_email = (TextInputLayout)v.findViewById(R.id.input_email);
        input_password = (TextInputLayout)v.findViewById(R.id.input_password);
        input_edit_email = (TextInputEditText) v.findViewById(R.id.input_edit_email);
        input_edit_password = (TextInputEditText) v.findViewById(R.id.input_edit_password);

        button_login = (AppCompatButton) v.findViewById(R.id.button_login);
        registerLink = (AppCompatTextView) v.findViewById(R.id.registerLink);

        button_login.setOnClickListener(this);
        registerLink.setOnClickListener(this);

        return v;

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button_login:
                verifyFromSQLite();
                break;
            case R.id.registerLink:
                Intent intentRegister = new Intent(getActivity().getApplicationContext(), registerFragment.class);
                startActivity(intentRegister);
                break;
        }

    }

  /*  private void initObjects(){
        databaseHelper = new DatabaseHelper(this);
        inputValidation = new InputValidation();
    }*/

        private void verifyFromSQLite(){
            if (!inputValidation.isInputEditTextFilled(input_edit_email, input_email, getString(R.string.error_message_email))) {
                return;
            }
            if (!inputValidation.isInputEditTextEmail(input_edit_email,  input_email, getString(R.string.error_message_email))) {
                return;
            }
            if (!inputValidation.isInputEditTextFilled(input_edit_password,  input_password, getString(R.string.error_message_email))) {
                return;
            }

            if (databaseHelper.checkUser(input_edit_email.getText().toString().trim()
                    , input_edit_password.getText().toString().trim())) {
                Intent accountsIntent = new Intent(getActivity().getApplication(), profileFragment.class);
                accountsIntent.putExtra("EMAIL", input_edit_email.getText().toString().trim());
                emptyInputEditText();
                startActivity(accountsIntent);
            } else {
               // Snackbar.make(nestedScrollView, getString(R.string.error_valid_email_password), Snackbar.LENGTH_LONG).show();
            }
        }


        private void emptyInputEditText(){
            input_edit_email.setText(null);
            input_edit_password.setText(null);
        }

    }

зарегистрировать класс

package com.example.tulio.appkolev.fragments;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.tulio.appkolev.R;

public class registerFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_register, container, false);
    }

}

манифест

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

    <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>
    </application>
</manifest>

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

0
0
171
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Intent intentRegister = new Intent(getActivity().getApplicationContext(),registerFragment.class);
startActivity(intentRegister);

registerFragment — это фрагмент, а не активность. Вы не можете запустить его с помощью startActivity. Вы можете изменить действие registerFragmentis extends и объявить это действие в AndroidManifest.xml.

Ответ принят как подходящий

Строка ниже вызывает проблему.

Intent intentRegister = new Intent(getActivity().getApplicationContext(),registerFragment.class);
startActivity(intentRegister);

Намерение используется только для активности, когда вы вызываете фрагмент, используя это намерение, которое, очевидно, приводит к сбою. Поэтому вместо использования намерения для вызова фрагмента вы должны использовать для этого диспетчер фрагментов.

  getFragmentManager()
        .beginTransaction()
        .replace(R.id.fragment_container, new registerFragment())
        .commit();

Примечания. Хорошей практикой является использование стандарта именования в верблюжьем регистре для любого класса, который вы используете в проекте.

Другие вопросы по теме