java - 如何在 Android Studio 中将 Activity 转换为 fragment ?

标签 java android android-activity android-fragmentactivity

我有这个 Activity

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) {

        }
    });


}

}

我想知道是否有一种简单的方法可以将其转换为 fragment ?任何帮助,将不胜感激。 我想这样做的原因是因为我想实现一个抽屉导航菜单,我已经看到你必须使用 fragment (我知道有一种方法可以用类来做,但它更复杂)而且我已经有了这个类,所以我想重用它而不是从头开始创建新 fragment 。

最佳答案

让我们试试这个:

  1. 扩展 fragment 并将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(...) 和其他不需要 Activity 运行的代码。

  2. 覆盖 onActivityCreated() 并将所有需要 Activty 的代码放在这里。

  3. 删除已经转换为 fragment 的代码

这不是完美的答案,但应该有所帮助。

关于java - 如何在 Android Studio 中将 Activity 转换为 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47430446/

相关文章:

android - 将 android Activity 定义为带有浅色主题的对话框

Java vector 数学可读性

java - Tapestry Hibernate session 超出 ExecutorService 固定线程池后关闭

android - 如何测试 Activity 的 onDestroy 方法

android - 在 0x09050941(代码=1)处获取错误致命信号 11(SIGSEGV)关于使用 Canvas 制作圆形图像

android - Mapview 上的气球,也希望在 android map 上的气球位置发生变化时获取位置

安卓模式 : A Spinner where every item launches a different Activity

java - 如何在 unix shell 中运行命令,然后从 java 应用程序返回输出

java - 如何使 Jersey Rest POST 请求同步

java - Android ArrayList,如何获取ListView的onClick