如何使用Firebase列表适配器

时间:2016-06-02 00:48:11

标签: android firebase listadapter firebase-realtime-database firebaseui

我试图按照本教程进行操作:

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取代什么?我尝试创建自己的列表视图并将上面的内容替换为我的R.id.listView,但没有任何反应..我无法弄清楚这个魔法是如何工作的。

3)即使这个简单的应用程序也不起作用..按钮确实添加了&#34; test123&#34;在服务器上的正确位置,但我在我的应用程序上看不到任何内容..什么是错的?

2 个答案:

答案 0 :(得分:6)

我发现了什么问题,我错过了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 :(得分:3)

  1. FirebaseListAdapter.populateView() docs
  2.   

    每次给定Firebase位置的数据发生更改时,将为每个需要显示的项目调用此方法。参数对应于给予此类构造函数的mLayout和mModelClass。   您的实现应使用模型中包含的数据填充视图。

    1. 如果您想要自定义查找列表项,可以将其替换为您自己的自定义布局。同样根据上面引用的文档:
    2.   

      modelLayout - 这是用于表示单个列表项的布局。您将负责使用来自modelClass实例的数据填充相应视图的实例。

      1. 我之前没有尝试使用FirebaseListAdapter,但您可以查看此sample by Puf,可能会清除。也会检查出来,然后看看我是否能弄清楚什么是错误的。
      2. 干杯!