Адаптер viewPager не обновляется - PullRequest
0 голосов
/ 25 апреля 2018

Я пытаюсь обновить адаптер (MyCollegePagerAdapter) из CollegeHTMLParse.class. Однако, несмотря на то, что я создал объект и вызвал для него метод notifyDataSetChanged (), на фрагментах видно, что он обнаружен. Можете ли вы сказать мне, если что-то не так с моим кодом, так как я уже несколько недель пытаюсь найти решение, и после нескольких часов попыток я не могу выяснить проблему.

Вот класс CollegeHTMLParse:

public class CollegeHTMLParse extends AppCompatActivity {
    public static ArrayList<String> colleges = new ArrayList<>();
    public static ArrayList<String> accepted = new ArrayList<>();
    public static ArrayList<String> link = new ArrayList<>();
    public static ArrayList<String> location = new ArrayList<>();
    public static ArrayList<String> tuition = new ArrayList<>();
    FirebaseDatabase mRef;
    DatabaseReference database;
    public static ArrayList<String> data = new ArrayList<>();
    MyCollegePagerAdapter adapter = new MyCollegePagerAdapter(getSupportFragmentManager());

    public void onCreate(String CollegeCode) {
        colleges.clear();
        accepted.clear();
        link.clear();
        location.clear();
        tuition.clear();
        mRef = FirebaseDatabase.getInstance("https://successway18.firebaseio.com/");
        database = mRef.getReference().child("CollegeCodes").child("30");
        database.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                setCollegeValues(dataSnapshot.getKey());
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {
            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }


    public void setCollegeValues(String values) {
        colleges.add(values);
        int i = 0;
        while (i < colleges.size()) {
            database.child(colleges.get(i)).addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    setDetailsValues(dataSnapshot.getValue().toString());
                }

                @Override
                public void onChildChanged(DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onChildRemoved(DataSnapshot dataSnapshot) {

                }

                @Override
                public void onChildMoved(DataSnapshot dataSnapshot, String s) {

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
            i++;
        }

    }

    private void setDetailsValues(String details) {
        data.add(details);
        if (data.size() == 4) {
            accepted.add(data.get(0));
            link.add(data.get(1));
            location.add(data.get(2));
            tuition.add(data.get(3));
            data.clear();
        }
        update();
    }

    private void update() {           
      adapter.notifyDataSetChanged();    
    }
}

Большое спасибо заранее!

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Запрос Firebase выполняется в рабочем потоке, поэтому вы должны запустить notifyDataSetChanged в основном потоке. Попробуйте использовать приведенный ниже код в функции update ()

runOnUiThread(new Runnable() {
    @Override
    public void run() {

    }
});
0 голосов
/ 25 апреля 2018

Добавьте это в свой пейджинговый адаптер

  @Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}
...