Почему мой фрагмент не работает, когда я нажимаю на кнопку, чтобы переключить фрагмент? - PullRequest
2 голосов
/ 03 марта 2020

Я пытаюсь создать два фрагмента и вставить его в контейнер фрагментов, одновременно управляя ими двумя кнопками. Не было ошибки, просто это не работает ..... enter image description here

ааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа 1006 *

активность_основной * xml* *

В основном я думаю, что проблема здесь в MainActivity

MainActivity. java

package com.example.testonli;

import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

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

    }

    public void ChangeFragment(View view){
        Fragment fragment;
        if(view == findViewById(R.id.signinButton)){
            fragment = new SigninFragment();
            FragmentManager fm = getFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            ft.replace(R.id.fragment_container, fragment);
            ft.commit();
        }
        if(view == findViewById(R.id.signUpButton)){
            fragment = new SignupFragment();
            FragmentManager fm = getFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            ft.replace(R.id.fragment_container, fragment);
            ft.commit();

        }
    }

}

1 Ответ

1 голос
/ 03 марта 2020

Не сравнивать представления как объекты.

т.е. не

if(view == findViewById(R.id.signinButton)){

do

if(view.getId() == R.id.signinButton){

Это означает, что вы сравниваете примитив int. с == (а не с View объектом).

При сравнении объекта (такого как view) с == вы фактически сравниваете, если ссылка на объект в памяти одинакова для два объекта (это не будет).

Если вы хотите, чтобы сравнение объектов работало, вам нужно будет использовать .equals, т.е. view.equals(findViewById(R.id.signinButton)), однако, если это работает, определяется методом equals() внутри View.class так что вам go придется проверить исходный код, чтобы увидеть, будет ли он работать. :) TLDR: сравнить простые примитивы проще:)

Refs:

https://www.gotoassignmenthelp.com/blog/common-mistakes-java-programmers-commit/ (# 7)

https://www.toptal.com/java/top-10-most-common-java-development-mistakes (# 10)

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