Как перейти от действия к фрагменту

#android

#Android

Вопрос:

Я написал этот код для входа в систему и для общения в чате; вход в систему — это действие, где чат — это фрагмент; вот моя активность :

 public class Consultant extends AppCompatActivity {


    private FirebaseAuth auth;
    private Button loginbtn;
    private EditText email;
    private EditText pass;

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

        auth = FirebaseAuth.getInstance();

        loginbtn = (Button) findViewById(R.id.loginbtn);
        email = (EditText) findViewById(R.id.email);
        pass = (EditText) findViewById(R.id.pass);

        loginbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                checkEmailandpassword();
            }
        });
    }

    public boolean checkEmailandpassword() {
        if (validate()) {
            String CEmail = email.getText().toString().trim();
            String CPass = pass.getText().toString().trim();

            auth.signInWithEmailAndPassword(CEmail, CPass).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {

                    if (task.isSuccessful()) {
                        Toast.makeText(Consultant.this, "welcome", Toast.LENGTH_LONG).show();
                        Intent i = new Intent(Consultant.this,Consultant_Home_Chatting.class);
                        startActivity(i);
                    } else {
                        Toast.makeText(Consultant.this, "wrong ", Toast.LENGTH_LONG).show();
                    }

                }
            });
        }
        return false;
    }
            private boolean validate() {
                boolean result = false;

                String CPass = pass.getText().toString();
                String CEmail = email.getText().toString();

                if (CPass.isEmpty() || CEmail.isEmpty()) {
                    Toast.makeText(Consultant.this, "all fields required", Toast.LENGTH_LONG).show();
                } else {
                    result = true;
                }

                return resu<
            }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_nav, menu);
        return true;
    }
        }
  

и вот мой фрагмент :

    public class Consultant_Home_Chatting extends Fragment {
private ViewPager mViewP ;
private FirebaseAuth mAuth ;
private TabLayout mTab ;
private TabsPagerAdapter mAdapter ;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_consultant__home__chatting, container, false);
}

public  Consultant_Home_Chatting() {

}


@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {

    mAuth = FirebaseAuth.getInstance();
    mViewP = (ViewPager) getView().findViewById(R.id.main_tabs_pager);

    mAdapter = new TabsPagerAdapter(getFragmentManager());
    mViewP.setAdapter(mAdapter);
    mTab = (TabLayout) getView().findViewById(R.id.main_tabs);
    mTab.setupWithViewPager(mViewP);
}
  

Я попытался добавить новый класс, содержащий эти залоги, затем создать конструктор в моем методе fragment и onCreatOptions в моей activity, но это не работает!
Я думаю, что решение состоит в том, чтобы использовать пакет, но я не знаю, как его использовать, или я могу его использовать, и что я могу отправить внутри put extra, не могли бы вы помочь?

    if (savedInstanceState == null){
            getFragmentManager().beginTransaction()
                    .add(android.R.id.content, new Consultant_Home_Chatting ()).commit();}
  

Ответ №1:

чтобы использовать bundle, просто создайте экземпляр вашего фрагмента, а затем создайте bundle, добавьте все нужные данные и добавьте этот пакет к фрагменту. Вот пример:

В действии:

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

    TestFragment testFragment = new TestFragment();
    Bundle bundle = new Bundle();
    bundle.putString("name", "John");
    bundle.putInt("age", 24);
    testFragment.setArguments(bundle);

    getSupportFragmentManager()
       .beginTransaction()
       .add(R.id.content, testFragment).commit();

}
  

В вашем фрагменте:

 public class TestFragment extends Fragment {

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

    Bundle bundle = getArguments();
    if(bundle != null){
        String name = bundle.getString("name");
        int age =`enter code here` bundle.getInt("age");
    }
  }
}
  

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

1. Вы хотите переопределить onCreateView в своем фрагменте, а не onCreate, верно?

2. @brandonx это не имеет значения, если вам нужны эти данные, onCreateView используйте их там, если не используйте их в onCreate