Как преобразовать активность в фрагмент в 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 ответа
Давайте попробуем это:
- Расширить фрагмент и рефакторинг
MyActivityClass
вMyFragmentClass
оригинал: public class MyActivityClass extends AppCompatActivity
преобразовано: public class MyFragmentClass extends Fragment
- Создайте метод фабрики и добавьте все значения, которые вы получаете
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);
}
}
- метод переопределения
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;
}
разместить все
findViewById(...);
заявление вonCreateView()
и переименовать вview.findViewById(...)
и другой код, который не требует активности для запуска.переопределение
onActivityCreated()
и поместите весь код, который нуженActivty
здесь.- удалить код, уже преобразованный во фрагмент
Это не идеальный ответ, но должен помочь.
Попробуй это:
- Создать фрагмент
- Вместо этого переместите этот код и макет во фрагмент
- Теперь у вас есть многоразовый фрагмент
- Добавьте фрагмент в свою деятельность или навигационный ящик или где угодно