【问题标题】:Need to reverse the listview after retriving data from firebase从firebase检索数据后需要反转listview
【发布时间】:2018-10-15 09:36:15
【问题描述】:

我创建了一个 android 应用程序。在我的应用程序中,当人们单击按钮时,它会转到请求列表活动并显示所有名称和描述。每个数据都存储在 Firebase 中。 firebase 一个接一个地依次存储数据。这就是为什么当我从 firebase 获取数据时,列表会依次显示所有内容。但我想在顶部显示最后一个数据。我怎么能做到这一点。

这是我的活动,其名称为 requestList

RequestList.java

String description;
ArrayList<String> RequestList;
ListView listView;
ArrayAdapter<String> arrayAdapter;



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


    RequestList = new ArrayList<>();

    listView = (ListView) findViewById(R.id.list_request);
    arrayAdapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.list, RequestList);

    listView.setAdapter(arrayAdapter);





    DatabaseReference myRef = database.getReference("Request");



    myRef.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            RequestName Request = dataSnapshot.getValue(RequestName.class);
            String requestInfo = "Name : "+ Request.requestname + "   \nDescription : " +  Request.description;
            RequestList.add(requestInfo);
            arrayAdapter.notifyDataSetChanged();
        }



        @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) {

        }
    });
}

这是布局

activity_request_list



<ListView
    android:id="@+id/list_request"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:divider="@color/red"
    android:dividerHeight="2dip" />

我使用了自定义布局进行显示

list_item

<TextView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="20dp"
    android:textStyle="bold"
    android:layout_marginLeft="15dp"
    android:textColor="@color/White" />

请帮忙

【问题讨论】:

  • 我不确定这有多有效,但也许您可以使用 Collections.reverse(list); 反转您的列表
  • @ZUNJAE 当我遇到与 Nahid 相同的问题时,我实际上尝试过一次。当从 Firebase 检索每个节点时调用 onChildAdded。这意味着:您检索“a”并将其放入列表中,然后将其反转。然后您获取“b”,列表变为“a,b”,您将其反转->“b,a”。然后你得到“c”,列表变成“b,a,c”并将其反转为“c,a,b”。在你得到第三个数据节点之后,它就变得没用了。

标签: java android firebase firebase-realtime-database


【解决方案1】:

我会尝试将requestInfo 添加为RequestList 的第一个元素。这可能会解决您的问题,而不是颠倒所有列表。

myRef.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        RequestName request = dataSnapshot.getValue(RequestName.class);
        String requestInfo = "Name : "+ Request.requestname + "   \nDescription : " +  Request.description;
        RequestList.add(0, requestInfo);
        arrayAdapter.notifyDataSetChanged();
    }

    // Other methods are removed for simplicity. 
});

希望对您有所帮助!

【讨论】:

    【解决方案2】:

    您可以将 Collection 用于反向,例如:- Collection.reverse(RequestList);

    RequestList = new ArrayList<>();
    
    listView = (ListView) findViewById(R.id.list_request);
    arrayAdapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.list, RequestList);
    
    listView.setAdapter(arrayAdapter);
    
    
    
    
    
    DatabaseReference myRef = database.getReference("Request");
    
    
    
    myRef.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            RequestName Request = dataSnapshot.getValue(RequestName.class);
            String requestInfo = "Name : "+ Request.requestname + "   \nDescription : " +  Request.description;
            RequestList.add(requestInfo);
           Collection.reverse(RequestList);
            arrayAdapter.notifyDataSetChanged();
        }
    
    
    
        @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) {
    
        }
    });mpElements);
    

    【讨论】:

    • 当我遇到与@Nahid 相同的问题时,我实际上尝试过一次。当从 Firebase 检索每个节点时调用 onChildAdded。这意味着:您检索“a”并将其放入列表中,然后将其反转。然后您获取“b”,列表变为“a,b”,您将其反转->“b,a”。然后你得到“c”,列表变成“b,a,c”并将其反转为“c,a,b”。在你得到第三个数据节点之后,它就变得没用了。
    • 我试过了,你也可以把它放在 addChildEventListener 之外。
    猜你喜欢
    • 2017-02-08
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 2016-12-18
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多