Как преобразовать активность в фрагмент в Android Studio?

У меня есть эта деятельность

package com.padilla.jorge.proyecto_aplicaciones_moviles;


import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;
import java.util.Calendar;



public class VerPerfil extends AppCompatActivity {
private String[] arraySpinner;
Intent i;
TextView Nombre_TextView;
TextView Email_TextView;
TextView Password_TextView;
TextView Puntos_TextView;

TextView getNombre;
TextView getEmail;
TextView getPassword;
TextView getPuntos;


ArrayList<TextView> textViewsVal;
ArrayList<TextView> textViewsName;

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference reference;

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ver_perfil);
    Nombre_TextView=(TextView)findViewById(R.id.Nombre_textView);
    Email_TextView=(TextView)findViewById(R.id.Email_TextView);
    Password_TextView=(TextView)findViewById(R.id.Password_TextView);
    Puntos_TextView=(TextView)findViewById(R.id.Puntos_TextView);
    getNombre=(TextView)findViewById(R.id.Nombre_valor);
    getEmail=(TextView)findViewById(R.id.Email_valor);
    getPassword=(TextView)findViewById(R.id.Password_valor);
    getPuntos=(TextView)findViewById(R.id.Puntos_valor);


    textViewsName = new ArrayList<TextView>();
    textViewsName.add(Nombre_TextView);
    textViewsName.add(Email_TextView);
    textViewsName.add(Password_TextView);
    textViewsName.add(Puntos_TextView);

    textViewsVal = new ArrayList<TextView>();
    textViewsVal.add(getNombre);
    textViewsVal.add(getEmail);
    textViewsVal.add(getPassword);
    textViewsVal.add(getPuntos);
    Intent name_intent=this.getIntent();
    final String name=name_intent.getExtras().getString("name");

    reference = database.getReference(name).child("Perfil");
    reference.addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            //rutina.setText(dataSnapshot.getKey());
            int i = 0;
            Log.d("number of childs",""+dataSnapshot.getChildrenCount());

            for (DataSnapshot child : dataSnapshot.getChildren()) {

                if (i < 10) {
                    textViewsName.get(i).setText(child.getKey());
                    textViewsVal.get(i).setText(child.getValue().toString());
                    Log.d("User key", child.getKey());
                    Log.d("User ref", child.getRef().toString());
                    Log.d("User val", child.getValue().toString());
                    i++;
                }

            }
        }


        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });


}

}

и мне было интересно, если есть простой способ преобразовать его во фрагмент? Любая помощь будет оценена. Причина, по которой я хочу это сделать, заключается в том, что я хочу реализовать меню навигационного ящика, и я видел, что вы должны использовать фрагменты (я знаю, что есть способ сделать это с классами, но это намного сложнее), и у меня уже есть это класс, поэтому я хотел бы использовать его вместо создания нового фрагмента с нуля.

2 ответа

Давайте попробуем это:

  1. Расширить фрагмент и рефакторинг MyActivityClass в MyFragmentClass

оригинал: public class MyActivityClass extends AppCompatActivity
преобразовано: public class MyFragmentClass extends Fragment

  1. Создайте метод фабрики и добавьте все значения, которые вы получаете getIntent().getExtra() в качестве параметров для метода

оригинал: String name=getIntent.getExtras().getString("name");

преобразовано:

это

public static MyFragmentClass newInstance(String name){
    MyFragmentClass fragment = new MyActivity();
    Bundle args = new Bundle();
    args.putString(KEY_NAME, name);
    fragment.setArguments(args);
    return fragment;
}

и это,

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        name = getArguments().getString(KEY_NAME);
    }
}
  1. метод переопределения onCreateView() и надуйте свой макет

оригинал: setContentView(R.layout.activity_layout);

преобразовано:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_layout, container, false);
        return view;
    }
  1. разместить все findViewById(...); заявление в onCreateView() и переименовать в view.findViewById(...) и другой код, который не требует активности для запуска.

  2. переопределение onActivityCreated() и поместите весь код, который нужен Activty здесь.

  3. удалить код, уже преобразованный во фрагмент

Это не идеальный ответ, но должен помочь.

Попробуй это:

  1. Создать фрагмент
  2. Вместо этого переместите этот код и макет во фрагмент
  3. Теперь у вас есть многоразовый фрагмент
  4. Добавьте фрагмент в свою деятельность или навигационный ящик или где угодно
Другие вопросы по тегам