不知道如何将在onDataChanged中填充的数组列表发送到被调用的方法,以创建一个新的片段以将其与bundle对象一起传递
我尝试弄乱构造函数,以期望它作为参数,并且在构造函数的主体中显示为“非空”,但此后,由于尝试并似乎不知道如何将其发送到addFragment方法“空值”。我试图以MainActivity.this.arraylist的形式访问它,但它说是空的。我已经将其设为静态,但仍然显示为空
公共类MainActivity扩展了AppCompatActivity {
private TabLayout tablayout;
private ViewPager viewpager;
private Temperatura temperatura;
private Humedad humedad;
private Viento viento;
private Info informacion;
List<String> Lecturabundle = new ArrayList<>();
DatabaseReference mDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDatabase = FirebaseDatabase.getInstance().getReference();
tablayout = findViewById(R.id.tablayout);
viewpager = findViewById(R.id.viewpager);
temperatura = new Temperatura();
humedad = new Humedad();
viento = new Viento();
informacion = new Info();
tablayout.setupWithViewPager(viewpager);
ViewPagerAdapter viewpageradapter = new ViewPagerAdapter(getSupportFragmentManager(), 0);
mDatabase.child("lectura").child("hora").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Lecturabundle.add(dataSnapshot.getValue().toString());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
System.out.println("The read failed: " + databaseError.getCode());
}
});
viewpageradapter.addFragment(temperatura, "Temperatura");
viewpageradapter.addFragment(humedad, "Humedad");
viewpageradapter.addFragment(viento, "Viento");
viewpageradapter.addFragment(informacion, "info");
viewpager.setAdapter(viewpageradapter);
}
private class ViewPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments = new ArrayList<>();
private List<String> fragmentTitle = new ArrayList<>();
public ViewPagerAdapter(@NonNull FragmentManager fm, int behavior) {
super(fm, behavior);
}
@NonNull
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
public void addFragment(Fragment fragment, String title, List<String> recibeArrayList){
在这里,我需要使用LecturaBundle,以便我可以将其发送到每个片段,但是我不知道该如何做,因为我一直想让我说清楚一点,在这种情况下,我非常注意TRU
Bundle b = new Bundle();
b.putStringArrayList("recibe", (ArrayList<String>) Lecturabundle);
fragment.setArguments(b);
fragments.add(fragment);
fragmentTitle.add(title);
}
@Override
public int getCount() {
return fragments.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return fragmentTitle.get(position);
}
}
}
我需要将Lecturabundle包含在addFragment中,以便我可以将其作为束传递给这些片段
正确的方法是使用Bundle将其传递给片段。但是在您的情况下,您正在onCreate中创建/初始化片段,并且过了一段时间后将调用onDataChanged方法,您可以说它可能需要几秒钟到几分钟才能被调用,具体取决于数据。因此,如果要将数据发送到片段,您可以做的是可以在片段类中创建一个公共方法,假设将其命名为newDataInserted(list),并将list作为参数。现在,您可以使用之前创建的片段实例在onDataChanged()中调用该方法。例如
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Lecturabundle.add(dataSnapshot.getValue().toString());
if(temperature != null) {
temperatura.newDataInserted(Lecturabundle);
}
}