- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
不知道如何将 onDataChanged 中填充的数组列表发送到被调用以创建新 fragment 以将其与 bundle 对象一起传递的方法
我尝试过修改构造函数以期望它作为参数,并且在构造函数的主体中显示为“非空”,但之后我不知道如何将其发送到 addFragment 方法,因为我已经尝试过并且似乎“空”。我试图以 MainActivity.this.arraylist 的形式访问它,但它说是空的。我已将其设为静态,但它仍然显示为空
公共(public)类 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 的地方,这样我就可以将它发送到每个 fragment ,但我不知道如何正确执行它,因为我尝试过的方法让我到达了一个点,当它最终到达 ISEMPTY() 时说的是真的
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 传递给 fragment
最佳答案
正确的方法是使用 Bundle 将其传递给您的 fragment 。但就您而言,您正在 onCreate 中创建/初始化 fragment ,并且 onDataChanged 方法在一段时间后被调用,您可以说根据数据可能需要几秒钟到几分钟的时间来调用。因此,如果您想将该数据发送到 fragment ,您可以在 fragment 类中创建一个公共(public)方法,假设将其命名为 newDataInserted(list),并以 list 作为参数。现在您可以使用之前创建的 fragment 实例在 onDataChanged() 内调用该方法。例如
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Lecturabundle.add(dataSnapshot.getValue().toString());
if(temperature != null) {
temperatura.newDataInserted(Lecturabundle);
}
}
关于java - 有没有办法将数组列表从 onDataChange 传递到 fragment ViewPagerAdapter 内部类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61164218/
我是一名优秀的程序员,十分优秀!