有什么方法可以将数组列表从onDataChange传递到片段ViewPagerAdapter内部类吗?

问题描述 投票:0回答:1

不知道如何将在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中,以便我可以将其作为束传递给这些片段

java android firebase android-fragments
1个回答
0
投票

正确的方法是使用Bundle将其传递给片段。但是在您的情况下,您正在onCreate中创建/初始化片段,并且过了一段时间后将调用onDataChanged方法,您可以说它可能需要几秒钟到几分钟才能被调用,具体取决于数据。因此,如果要将数据发送到片段,您可以做的是可以在片段类中创建一个公共方法,假设将其命名为newDataInserted(list),并将list作为参数。现在,您可以使用之前创建的片段实例在onDataChanged()中调用该方法。例如

public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
      Lecturabundle.add(dataSnapshot.getValue().toString());
      if(temperature != null) {
         temperatura.newDataInserted(Lecturabundle);
      }
}
© www.soinside.com 2019 - 2024. All rights reserved.