Как заполнить RecyclerView данными из базы данных Firebase с помощью FirebaseUI? - PullRequest
0 голосов
/ 16 ноября 2018

Я изо всех сил пытаюсь заполнить мой взгляд переработчика, и я не могу определить, почему. Я пытаюсь заполнить представление данными из базы данных Firebase, я могу успешно получить данные, но я не могу понять, как правильно настроить представление переработчика, я также использую FirebaseUI. Вот моя активность, содержащая firebaseUI и вызов базы данных:

public class LoggedInActivity extends AppCompatActivity {

private DatabaseReference mDatabase;

RecyclerView contentView;

private TextView mTextMessage;
        ImageButton positive;
        ImageButton balanced;
        ImageButton negative;

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.navigation_home:
                mTextMessage.setText(R.string.title_home);

                return true;
            case R.id.navigation_dashboard:
                mTextMessage.setText(R.string.title_dashboard);

                return true;
            case R.id.navigation_notifications:
                mTextMessage.setText(R.string.title_notifications);

                return true;
        }
        return false;
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_logged_in);

    positive = findViewById(R.id.heartButton);
    balanced = findViewById(R.id.balancedButton);
    negative = findViewById(R.id.negativeButton);

    mTextMessage = findViewById(R.id.message);
    mTextMessage.setTextColor(Color.WHITE);
    BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);

    mDatabase = FirebaseDatabase.getInstance().getReference();

    DatabaseReference mRef = mDatabase.child("posts");
    Query query = FirebaseDatabase.getInstance()
            .getReference()
            .child("posts")
            .limitToLast(50);

    query.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) {
            Post newPost = dataSnapshot.getValue(Post.class);
            System.out.println("Title: " + newPost.title);
            System.out.println("Body: " + newPost.body);
            System.out.println("Previous Post ID: " + prevChildKey);
        }

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

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {}

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

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    });


        FirebaseRecyclerOptions<Post> options =
            new FirebaseRecyclerOptions.Builder<Post>()
                    .setQuery(query, Post.class)
                    .build();

    FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<Post, PostHolder>(options) {
        @Override
        public PostHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            // Create a new instance of the ViewHolder, in this case we are using a custom
            // layout called R.layout.message for each item
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.post_content, parent, false);

            return new PostHolder(view);
        }

        @Override
        protected void onBindViewHolder(PostHolder holder, int position, Post model) {
            // Bind the Chat object to the ChatHolder
            // ...
           holder.bind


        }
    };

    contentView = findViewById(R.id.recyclerView);
    contentView.setAdapter(adapter);

}

}

Я также создал свой класс для извлечения сообщений из базы данных:

@IgnoreExtraProperties
public class Post {

public String title;
public String body;
public String username;

public Post() {
    // Default constructor required for calls to DataSnapshot.getValue(User.class)
}

public Post(String title, String body, String username) {
    title = title;
    body = body;
    username = username;
}

public String getTitle() { return title; }

public String getBody() { return body; }

public String getUsername() { return username; }

}

Я сейчас пытаюсь получить заголовок сообщения, я сделал этот пользовательский держатель:

public class PostHolder extends RecyclerView.ViewHolder {

TextView title;
TextView body;
TextView username;

public PostHolder(@NonNull View itemView) {
    super(itemView);
    title = (TextView) itemView.findViewById(R.id.title)
}

}

Здесь я думаю, что столкнулся с проблемой, я не уверен, как связать данные Post, чтобы они отображались на этой метке, которую я создал как post_content.xml:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp">

<TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="20sp"/>

 </LinearLayout>

Буду признателен за объяснение этой системы, так как нахожу его немного запутанным в отношении пользовательского держателя, обязательных и накачивающих частей. Куда я иду не так? Спасибо.

...