当活动恢复时,RecyclerView返回null

时间:2018-05-22 08:49:59

标签: android firebase android-layout android-recyclerview recycler-adapter

我有一个recyclerView,它可以在活动开始时正常工作。当我从那个活动转到另一个活动并回来时,recyclerView是空的。它没有显示任何内容,但有时会返回值但布局受到干扰,即项目之间会有间隙或布局与活动顶部之间存在较大差距。

该课程的代码是:

public class product_page extends AppCompatActivity {

  FirebaseAuth mAuth;
  String s, product;
  ProgressDialog progressDialog;
  private RecyclerView recyclerView;
  FirebaseDatabase firebaseDatabase;
  DatabaseReference databaseReference;
  DatabaseReference db;
  FirebaseRecyclerAdapter<ProductItemsConstructor, productViewHolder> FirebaseAdapter;

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

        Intent intent = getIntent();
        s = intent.getExtras().getString("pos");
        product = intent.getExtras().getString("product");

    mAuth = FirebaseAuth.getInstance();
    firebaseDatabase = FirebaseDatabase.getInstance();
    databaseReference = FirebaseDatabase.getInstance().getReference();

    RecyclerView.LayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
   // RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView = (RecyclerView) findViewById(R.id.recyclerView1);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());


    Query query = firebaseDatabase.getReference().child("Products").child(s).child(product).orderByKey();

    FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder<ProductItemsConstructor>().setQuery(query,ProductItemsConstructor.class).build();

    FirebaseAdapter = new FirebaseRecyclerAdapter<ProductItemsConstructor, productViewHolder>(options) {


        @Override
        public productViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.product_items,parent,false);
            return new productViewHolder(view);
        }

        @Override
        protected void onBindViewHolder(@NonNull productViewHolder holder, int position, @NonNull ProductItemsConstructor model) {
            holder.Heading(model.getHeading());
            holder.Price(model.getPrice());
            holder.Prates(model.getPprice());
            holder.Rating(model.getRating());
            holder.setImg(getApplicationContext(),model.getImageUrl());
        }
    };
    recyclerView.setAdapter(FirebaseAdapter);

}


@Override
protected void onStart() {
    super.onStart();

    FirebaseAdapter.startListening();
    recyclerView.setAdapter(FirebaseAdapter);
}

@Override
protected void onStop() {
    super.onStop();
    FirebaseAdapter.stopListening();
}

@Override
protected void onResume() {
    super.onResume();

    FirebaseAdapter.notifyDataSetChanged();
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent in = new Intent(product_page.this, MainActivity.class);
    startActivity(in);
}

public class productViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    TextView head, rate, Prate, rating;
    ImageView img;


    public productViewHolder(final View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);
    }

    private void Heading(String heading) {
        head = (TextView) itemView.findViewById(R.id.Pheading);
        head.setText(heading);
    }

    private void Price(String price) {
        rate = (TextView) itemView.findViewById(R.id.Pprice);
        rate.setText(price);
    }

    private void Prates(String prate){
        Prate = (TextView)itemView.findViewById(R.id.pRate);
        Prate.setText(prate);
    }

    private void Rating(String rting){
        rating = (TextView)itemView.findViewById(R.id.Rating);
        rating.setText(rting);
    }

    private void setImg(Context ctx, String img1) {
        img = (ImageView) itemView.findViewById(R.id.PImage);
        Picasso.with(ctx).load(img1).placeholder(R.drawable.notification).into(img);
        // progressDialog.dismiss();
    }
}

这是首次启动活动时的图像

enter image description here

这是恢复活动时的图像

enter image description here

日志显示如下

  

$ adb shell am start -n&#34; com.strease.user.strease / com.strease.user.strease.SplashScreen&#34; -a android.intent.action.MAIN -c android.intent.category.LAUNCHER   客户尚未准备好......等待流程上线   连接到设备motorola-moto_g__4_-ZY223L3X8L上的过程22007   从应用程序捕获和显示logcat消息。可以在&#34; Logcat输出中禁用此行为&#34; &#34;调试器&#34;的一部分设置页面。   W / System:ClassLoader引用未知路径:/data/app/com.strease.user.strease-2/lib/arm   W / DynamiteModule:找不到com.google.firebase.auth的本地模块描述符类。   W / DynamiteModule:找不到com.google.firebase.auth的本地模块描述符类。   I / BiChannelGoogleApi:[FirebaseAuth:]没有后备模块;不设置延迟初始化   D / FirebaseAuth:通知id令牌监听器有关用户(1wU7rrZpvLRCJeXeRITJkIXTu492)。   D / FirebaseApp:com.google.firebase.crash.FirebaseCrash未链接。跳过初始化。   V / FA:取消工作。 JobID:1598141556   W / DynamiteModule:找不到com.google.firebase.auth的本地模块描述符类。   V / FA:已注册的活动生命周期回调   I / FirebaseInitProvider:FirebaseApp初始化成功   W / art:在Android 4.1之前,方法android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter,android.content.res.ColorStateList,android.graphics.PorterDuff $ Mode)会有错误地覆盖了android.graphics.drawable.Drawable中的package-private方法   V / FA:onActivityCreated   I / FirebaseAuth:[FirebaseAuth:]通过FirebaseOptions加载模块。   I / FirebaseAuth:[FirebaseAuth:]准备创建与gms实现的服务连接   V / FA:已启用收藏         应用程序包,谷歌应用程序ID:com.strease.user.strease,1:841596997979:android:0ece7b89e3bda9c3   I / FA:应用程序测量正在启动,版本:11910         要启用调试日志记录运行:adb shell setprop log.tag.FA VERBOSE         要启用更快的调试模式事件日志记录运行           adb shell setprop debug.firebase.analytics.app com.strease.user.strease   D / FA:启用调试级别消息日志记录   V / FA:连接到远程服务   V / FA:连接尝试已在进行中   V / FA:连接尝试已在进行中         活动恢复,时间:33782085   I / FA:找不到标记管理器,因此不会使用   D / FA:记录事件(FE):screen_view(_vs),Bundle [{firebase_event_origin(_o)= auto,firebase_screen_class(_sc)= SplashScreen,firebase_screen_id(_si)= - 132049841330100120}]   D / FirebaseApp:通知身份验证状态侦听器。   D / FirebaseApp:通知0个身份验证状态侦听器。   I / Adreno:QUALCOMM build:7d18700,I8ee426a9a2             建造日期:2016年7月10日             OpenGL ES着色器编译器版本:XE031.09.00.03             当地分公司:mybranch22308589             远程分支:quic / LA.BR.1.3.6_rb1.6             远程分支:无             重建分支:没有   V / FA:连接尝试已在进行中   I / OpenGLRenderer:初始化的EGL,版本1.4   D / OpenGLRenderer:交换行为1   D / FA:连接到远程服务   V / FA:处理排队的服务任务:4   V / FA:记录用户参与度,ms:4017   V / FA:活动已暂停,时间:33786100   D / FA:记录事件(FE):user_engagement(_e),Bundle [{firebase_event_origin(_o)= auto,engagement_time_msec(_et)= 4017,firebase_screen_class(_sc)= SplashScreen,firebase_screen_id(_si)= - 132049841330100120}]   V / FA:onActivityCreated   V / FA:onActivityCreated   I / DynamiteModule:考虑本地模块com.google.android.gms.firebase_database:4和远程模块com.google.android.gms.firebase_database:6   V / FA:活动恢复,时间:33786801   I / DynamiteModule:com.google.android.gms.firebase_database的选定远程版本,版本&gt; = 6   D / FA:记录事件(FE):screen_view(_vs),Bundle [{firebase_event_origin(_o)= auto,firebase_previous_class(_pc)= SplashScreen,firebase_previous_id(_ pi)= - 132049841330100120,firebase_screen_class(_sc)= MainActivity,firebase_screen_id(_si )= - 132049841330100119}]   W / System:ClassLoader引用未知路径:   W / System:ClassLoader引用未知路径:/data/user_de/0/com.google.android.gms/app_chimera/m/000000cd/n/armeabi-v7a   W / System:ClassLoader引用未知路径:/data/user_de/0/com.google.android.gms/app_chimera/m/000000cd/n/armeabi   W / BiChannelGoogleApi:[FirebaseAuth:] getGoogleApiForMethod()返回Gms   W / BiChannelGoogleApi:[FirebaseAuth:] getGoogleApiForMethod()返回Gms   D / FirebaseAuth:通知id令牌监听器有关用户(1wU7rrZpvLRCJeXeRITJkIXTu492)。   D / NetworkSecurityConfig:使用平台默认设置,未指定Network Security Config   D / FirebaseApp:通知身份验证状态侦听器。   D / FirebaseApp:通知1个身份验证状态侦听器。   D / FirebaseAuth:通知id令牌监听器有关用户(1wU7rrZpvLRCJeXeRITJkIXTu492)。   D / FirebaseApp:通知身份验证状态侦听器。   D / FirebaseApp:通知1个身份验证状态侦听器。   W / ClassMapper:在类com.strease.user.strease.userInfoConstructor上找不到FCM令牌的setter / field                  在com.strease.user.strease.userInfoConstructor类中找不到Number的setter / field                  在com.strease.user.strease.userInfoConstructor类中找不到电子邮件的setter / field   W /设置:设置airplane_mode_on已从android.provider.Settings.System移至android.provider.Settings.Global,返回只读值。   我/艺术:部分代码缓存集合,代码= 18KB,数据= 30KB   I / art:代码缓存收集后,代码= 13KB,数据= 27KB          将代码缓存容量增加到128KB   V / FA:不活动,断开与服务的连接   V / FA:会议开始,时间:33792791   D / FA:记录事件(FE):session_start(_s),Bundle [{firebase_event_origin(_o)= auto,firebase_screen_class(_sc)= MainActivity,firebase_screen_id(_si)= - 132049841330100119}]   V / FA:连接到远程服务   D / FA:连接到远程服务   V / FA:处理排队的服务任务:1   V / FA:不活动,断开与服务的连接   V / FA:记录用户参与度,ms:23339   V / FA:连接到远程服务   V / FA:活动已暂停,时间:33810138   D / FA:记录事件(FE):user_engagement(_e),Bundle [{firebase_event_origin(_o)= auto,engagement_time_msec(_et)= 23339,firebase_screen_class(_sc)= MainActivity,firebase_screen_id(_si)= - 132049841330100119}]   V / FA:onActivityCreated   V / FA:连接尝试已在进行中   V / FA:连接尝试已在进行中   V / FA:活动恢复,时间:33810224   D / FA:记录事件(FE):screen_view(_vs),Bundle [{firebase_event_origin(_o)= auto,firebase_previous_class(_pc)= MainActivity,firebase_previous_id(_ pi)= - 132049841330100119,firebase_screen_class(_sc)= product_page,firebase_screen_id(_si )= - 132049841330100118}]   V / FA:连接尝试已在进行中   D / FA:连接到远程服务   V / FA:处理排队的服务任务:4   我/艺术:部分代码缓存集合,代码= 42KB,数据= 62KB   I / art:代码缓存收集后,代码= 42KB,数据= 62KB          将代码缓存容量增加到256KB   V / FA:不活动,断开与服务的连接   V / FA:记录用户参与度,ms:10218   V / FA:连接到远程服务   V / FA:活动已暂停,时间:33820442   D / FA:记录事件(FE):user_engagement(_e),Bundle [{firebase_event_origin(_o)= auto,engagement_time_msec(_et)= 10218,firebase_screen_class(_sc)= product_page,firebase_screen_id(_si)= - 132049841330100118}]   V / FA:onActivityCreated   I / TextInputLayout:添加的EditText不是TextInputEditText。请切换到使用该类。   V / FA:连接尝试已在进行中   W / AllCapsTransformationMethod:调用者没有启用长度更改;没有改变文字                                  来电者没有启用长度变化;没有改变文字   I / TextInputLayout:添加的EditText不是TextInputEditText。请切换到使用该类。   V / FA:连接尝试已在进行中         活动恢复,时间:33821178   D / FA:记录事件(FE):screen_view(_vs),Bundle [{firebase_event_origin(_o)= auto,firebase_previous_class(_pc)= product_page,firebase_previous_id(_ pi)= - 132049841330100118,firebase_screen_class(_sc)= Checkout_page,firebase_screen_id(_si )= - 132049841330100117}]   V / FA:连接尝试已在进行中   D / FA:连接到远程服务   V / FA:处理排队的服务任务:4   V / FA:不活动,断开与服务的连接   V / FA:记录用户参与度,ms:18503   V / FA:连接到远程服务   V / FA:活动已暂停,时间:33839680   D / FA:记录事件(FE):user_engagement(_e),Bundle [{firebase_event_origin(_o)= auto,engagement_time_msec(_et)= 18503,firebase_screen_class(_sc)= Checkout_page,firebase_screen_id(_si)= - 132049841330100117}]   V / FA:连接尝试已在进行中         连接尝试已在进行中   V / FA:活动恢复,时间:33839706   D / FA:记录事件(FE):screen_view(_vs),Bundle [{firebase_event_origin(_o)= auto,firebase_previous_class(_pc)= Checkout_page,firebase_previous_id(_ pi)= - 132049841330100117,firebase_screen_class(_sc)= product_page,firebase_screen_id(_si )= - 132049841330100118}]   V / FA:连接尝试已在进行中   D / FA:连接到远程服务   V / FA:处理排队的服务任务:4   V / FA:不活动,断开与服务的连接

任何帮助或扩展都将不胜感激 感谢。

2 个答案:

答案 0 :(得分:0)

尝试使用此代码:

public class product_page extends AppCompatActivity {


FirebaseAuth mAuth;
String s, product;
ProgressDialog progressDialog;
private RecyclerView recyclerView;
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference;
DatabaseReference db;
FirebaseRecyclerAdapter<ProductItemsConstructor, productViewHolder> FirebaseAdapter;

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

        Intent intent = getIntent();
        s = intent.getExtras().getString("pos");
        product = intent.getExtras().getString("product");

    mAuth = FirebaseAuth.getInstance();
    firebaseDatabase = FirebaseDatabase.getInstance();
    databaseReference = FirebaseDatabase.getInstance().getReference();

    RecyclerView.LayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
   // RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView = (RecyclerView) findViewById(R.id.recyclerView1);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());


    Query query = firebaseDatabase.getReference().child("Products").child(s).child(product).orderByKey();

    FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder<ProductItemsConstructor>().setQuery(query,ProductItemsConstructor.class).build();

    FirebaseAdapter = new FirebaseRecyclerAdapter<ProductItemsConstructor, productViewHolder>(options) {


        @Override
        public productViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.product_items,parent,false);
            return new productViewHolder(view);
        }

        @Override
        protected void onBindViewHolder(@NonNull productViewHolder holder, int position, @NonNull ProductItemsConstructor model) {
            holder.Heading(model.getHeading());
            holder.Price(model.getPrice());
            holder.Prates(model.getPprice());
            holder.Rating(model.getRating());
            holder.setImg(getApplicationContext(),model.getImageUrl());
        }
    };
    recyclerView.setAdapter(FirebaseAdapter);

}


@Override
protected void onStart() {
    super.onStart();

    FirebaseAdapter.startListening();
    recyclerView.setAdapter(FirebaseAdapter);
}

@Override
protected void onDestroy() {
    FirebaseAdapter.stopListening();
    super.onDestroy();
}

@Override
protected void onResume() {
    super.onResume();

    FirebaseAdapter.notifyDataSetChanged();
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    Intent in = new Intent(product_page.this, MainActivity.class);
    startActivity(in);
}

public class productViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    TextView head, rate, Prate, rating;
    ImageView img;


    public productViewHolder(final View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);
    }

    private void Heading(String heading) {
        head = (TextView) itemView.findViewById(R.id.Pheading);
        head.setText(heading);
    }

    private void Price(String price) {
        rate = (TextView) itemView.findViewById(R.id.Pprice);
        rate.setText(price);
    }

    private void Prates(String prate){
        Prate = (TextView)itemView.findViewById(R.id.pRate);
        Prate.setText(prate);
    }

    private void Rating(String rting){
        rating = (TextView)itemView.findViewById(R.id.Rating);
        rating.setText(rting);
    }

    private void setImg(Context ctx, String img1) {
        img = (ImageView) itemView.findViewById(R.id.PImage);
        Picasso.with(ctx).load(img1).placeholder(R.drawable.notification).into(img);
        // progressDialog.dismiss();
    }

答案 1 :(得分:0)

只对onResume()方法进行这些更改..

@Override
protected void onResume() {
super.onResume();

   //FirebaseAdapter.notifyDataSetChanged();
   getData();
   }
}
private void getData() {
    RecyclerView.LayoutManager layoutManager = new StaggeredGridLayoutManager(2, android.support.v7.widget.StaggeredGridLayoutManager.VERTICAL);
    // RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView = (android.support.v7.widget.RecyclerView) findViewById(R.id.recyclerView1);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setItemAnimator(new android.support.v7.widget.DefaultItemAnimator());

    Query query = firebaseDatabase.getReference().child("Products").child(s).child(product).orderByKey();

    FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder<ProductItemsConstructor>().setQuery(query, ProductItemsConstructor.class).build();

    FirebaseAdapter = new FirebaseRecyclerAdapter<ProductItemsConstructor, productViewHolder>(options) {

        @Override
        public productViewHolder onCreateViewHolder(android.view.ViewGroup parent, int viewType) {
            View view = android.view.LayoutInflater.from(parent.getContext()).inflate(R.layout.product_items, parent, false);
            return new productViewHolder(view);
        }

        @Override
        protected void onBindViewHolder(@android.support.annotation.NonNull productViewHolder holder, int position, @android.support.annotation.NonNull ProductItemsConstructor model) {
            holder.Heading(model.getHeading());
            holder.Price(model.getPrice());
            holder.Prates(model.getPprice());
            holder.Rating(model.getRating());
            holder.setImg(getApplicationContext(), model.getImageUrl());
        }
    };
    recyclerView.setAdapter(FirebaseAdapter);
    FirebaseAdapter.notifyDataSetChanged();
}