Заменить фрагмент входа на домашний фрагмент

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

Мне нужно попробовать много техники, но я не могу получить то, что хочу

вот что у меня в виде кода. Класс MainActivity:

package com.cuveri.mobile.vue;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.widget.TextView;
import android.widget.*;
import com.cuveri.mobile.controleur.LoginFragment;
import com.example.symameri.mhis.R;
import static com.example.symameri.mhis.R.layout.activity_Main;
public class MainActivity extends FragmentActivity{


@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(activity_Main);
    LoginFragment fragment = (LoginFragment) getFragmentManager().
            findFragmentById(R.id.logFragment);






}





/* public void navigatetoHomeActivity(){
    Intent homeIntent = new 
Intent(getApplicationContext(),HomeActivity.class);
    homeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(homeIntent);
    finish();
}*/

}

Layout actvity_Main:

 <?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools" 
android:layout_width = "match_parent"
android:layout_height = "match_parent" android:paddingLeft= 
"@android:dimen/app_icon_size"
android:paddingRight = "@android:dimen/app_icon_size"
android:paddingTop = "@android:dimen/app_icon_size"
android:paddingBottom = "@android:dimen/app_icon_size" tools:context = 
"com.cuveri.mobile.vue.MainActivity"
android:background = "#e2dfdf">

<?xml version = "1.0" encoding = "utf-8"?>
<fragment
    android:id = "@+id/logFragment"
    xmlns:android = "http://schemas.android.com/apk/res/android"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:name = "com.cuveri.mobile.controleur.LoginFragment"/>

<fragment
    android:id = "@+id/hFragment"
    xmlns:android = "http://schemas.android.com/apk/res/android"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:name = "com.cuveri.mobile.controleur.HomeFragment"/>

</RelativeLayout>

Класс Login_Fragment

package com.cuveri.mobile.controleur;


import android.app.Fragment;
import android.app.ProgressDialog;
import android.os.*;

import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.*;
import android.view.ViewGroup;
import android.widget.Button;
 import android.widget.EditText;
 import android.widget.TextView;

import com.cuveri.mobile.vue.MainActivity;
import com.example.symameri.mhis.R;

import java.io.IOException;

import ca.mimic.oauth2library.OAuth2Client;
import ca.mimic.oauth2library.OAuthError;
import ca.mimic.oauth2library.OAuthResponse;

public class LoginFragment extends Fragment{
//code le comportement du login
ProgressDialog prgDialog;
TextView errorMsg;
EditText identify;
EditText password;
Button connexion;

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup 
container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.login_fragment, container, false);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    errorMsg = (TextView) view.findViewById(R.id.login_error);
    password =(EditText) view.findViewById(R.id.Mot_de_passe);
    identify=(EditText) view.findViewById(R.id.Identifiant);
    connexion =(Button) view.findViewById(R.id.button_connexion) ;

    if (android.os.Build.VERSION.SDK_INT > 9)
    {
        StrictMode.ThreadPolicy policy = new 
    StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
    }
    public void loginUser (View view) {
    String username = identify.getText().toString();
    String passwords = password.getText().toString();


    OAuth2Client client = new OAuth2Client.Builder("macuverie_mobile", 
"appmobile", "http://10.0.2.2:8080/oauth/token")

.grantType("password").username(username).password(passwords).build();

    OAuthResponse response = null;
    try {
        response = client.requestAccessToken();
    } catch (IOException e) {
        e.printStackTrace();
        //Toast.makeText(this.getContext(), e.getMessage(), 
  Toast.LENGTH_LONG).show();

    }

    String accessToken = "";
    if (response.isSuccessful()) {
        accessToken = response.getAccessToken();
       // Toast.makeText(getApplicationContext(), "acces_token" + 
 accessToken, Toast.LENGTH_LONG).show();
       new MainActivity().navigatetoHomeActivity();
        //String refreshToken = response.getRefreshToken();
    } else {
        OAuthError error = response.getOAuthError();
        String errorMsg = error.getError();
        //Toast.makeText(getApplicationContext(), errorMsg, 
  Toast.LENGTH_LONG).show();
    }


  }


  }

Класс Home_Fragment:

package com.cuveri.mobile.controleur;

 import android.os.Bundle;
 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.symameri.mhis.R;

 public class HomeFragment extends Fragment{
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup 
container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.home_fragment, container, false);
}
}

вам нужно использовать Framelayout и диспетчер транзакций, нажмите официальную документацию

Pavneet_Singh 17.04.2018 17:55
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
1 757
2

Ответы 2

Лучший подход к этой проблеме - заменить виджет Fragment на FrameLayout, и вам нужно использовать этот последний виджет в качестве контейнера.

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

https://developer.android.com/reference/android/app/FragmentTransaction.html

Для этого есть слишком много вариантов, но вы не должны использовать их.

Из-за «Принцип раздельного беспокойства» или «Принцип единоначалия».

Поясню: фрагменты Login и Home принадлежат разной бизнес-логике. Так что у обоих должны быть разные виды деятельности. После этого, если вы не хотите повторно использовать некоторые части этих действий, вам не нужно и фрагменты.

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