gpt4 book ai didi

java - 有没有办法将数组列表从 onDataChange 传递到 fragment ViewPagerAdapter 内部类?

转载 作者:行者123 更新时间:2023-12-01 17:28:52 27 4
gpt4 key购买 nike

不知道如何将 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com