Как использовать адаптер списка Firebase

Я пытаюсь следовать этому руководству:

https://www.youtube.com/watch?v=2J6spwAVP0M

но реализация его на моем сложном приложении просто не работала, поэтому я попытался с нуля..

Я создал эту простую MainActivity:

public class MainActivity extends AppCompatActivity{

    Firebase mRef;
    com.firebase.ui.FirebaseListAdapter<String> myAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRef = new Firebase("https://<myURL>..");

        myAdapter = new FirebaseListAdapter<String>(this,String.class,android.R.layout.simple_list_item_1,mRef) {
            @Override
            protected void populateView(View view, String s, int i) {
                TextView text = (TextView)view.findViewById(android.R.id.text1);
                text.setText(s);

            }
        };
        Button addBtn = (Button) findViewById(R.id.add_button);
        addBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mRef.push().setValue("test123");
            }
        });
    }
}

Теперь у меня есть несколько вопросов:

1) что вызывает populateView? Я просто не мог заставить его работать

2) что именно должен android.R.layout.simple_list_item_1 заменить? Я попытался создание моего собственного listview и заменить выше с my R.id.listView но ничего не происходит.. Я не могу понять, как работает эта магия..

3) даже это простое приложение не работает.. кнопка добавляет "test123" в нужное место на сервере, но я ничего не вижу в своем приложении.. что случилось?

2 ответов


я узнал, что случилось, мне не хватало Listview.. Вот исправленный код:

public class MainActivity extends AppCompatActivity {

    Firebase mRef;
    com.firebase.ui.FirebaseListAdapter<String> myAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRef = new Firebase("https://<myURL>..");

        myAdapter = new FirebaseListAdapter<String>(this,String.class,android.R.layout.simple_list_item_1,mRef) {
            @Override
            protected void populateView(View view, String s, int i) {
                TextView text = (TextView) view.findViewById(android.R.id.text1);
                text.setText(s);
            }
        };
        final ListView lv = (ListView) findViewById(R.id.listView);
        lv.setAdapter(myAdapter);

        Button addBtn = (Button) findViewById(R.id.add_button);
        addBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mRef.push().setValue("test123");
            }
        });
    }


}

на lv.setAdapter что ассоциирует адаптер к моему списку, а также вызывает populateView.. Вот в принципе ответ на все мои 3 вопроса сразу..

вот xml, а также:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.twodwarfs.firebaselistadapter.MainActivity">


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="add"
        android:id="@+id/add_button"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true" />

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
        android:layout_toStartOf="@+id/add_button"
        android:layout_below="@+id/textView" />
</RelativeLayout>

  1. FirebaseListAdapter.populateView () docs:

каждый раз, когда данные в данном местоположении Firebase изменяются, этот метод будет вызываться для каждого элемента, который должен быть отображен. Аргументы соответствуют mLayout и mModelClass, заданным конструктору этого класса. Ваша реализация должна заполнить представление, используя данные, содержащиеся в модели.

  1. Вы можете заменить его на свой собственный макет, если вы хотите настроить внешний вид для элементов списка. Как и в документах, упомянутых выше:

modelLayout - это формат, используемый для представления одного элемента списка. Вы будете нести ответственность за заполнение экземпляра соответствующего представления данными из экземпляра modelClass.

  1. Я не пробовал использовать FirebaseListAdapter прежде, но вы можете проверить это образец Puf, возможно, понятно вещи. Также проверю его, а затем посмотрю, смогу ли я понять, что кажется неправильным.

Ура!