firebaserecycleradapter дает старую должность наверху списка и новое сообщение наконец, мне нужно новое сообщение наверху, как я могу это получить? [Дубликат]

Вы можете использовать libmail: http://lwest.free.fr/doc/php/lib/index.php3?page=mail&lang=en

include "libmail.php";
$m = new Mail(); // create the mail
$m->From( $_POST['form'] );
$m->To( $_POST['to'] );
$m->Subject( $_POST['subject'] );
$m->Body( $_POST['body'] );
$m->Cc( $_POST['cc']);
$m->Priority(4);
//  attach a file of type image/gif to be displayed in the message if possible
$m->Attach( "/home/leo/toto.gif", "image/gif", "inline" );
$m->Send(); // send the mail
echo "Mail was sent:"
echo $m->Get(); // show the mail source

6
задан Alex Boullé 23 May 2016 в 16:38
поделиться

2 ответа

Это не точное решение вашей проблемы с получением данных из firebase в обратном порядке, но в любом случае у нас есть другие проблемы.

Первая работа вокруг упоминается в комментарии использования пользовательского адаптера для вашего списка.

Чтобы добиться такого поведения, вам нужно получить данные о базе данных в списке, а затем вы должны перевернуть его самостоятельно, прежде чем передавать его на адаптер. Просто!

Вторая работа легко, как пирог, и я думаю, что если вы используете RecyclerView, это может сделать трюк для вас, и я считаю это самым простым способом выполнить эту работу.

Вот, я изменяю часть моего кода с помощью RecyclerView

// Declare the RecyclerView and the LinearLayoutManager first
private RecyclerView listView;
private LinearLayoutManager mLayoutManager;

...

@Override
public void onViewCreated(View view, Bundle savedInstanceState){

    // Use FirebaseRecyclerAdapter here

    // Here you modify your LinearLayoutManager
    mLayoutManager = new LinearLayoutManager(MainActivity.this);
    mLayoutManager.setReverseLayout(true);
    mLayoutManager.setStackFromEnd(true);

    // Now set the layout manager and the adapter to the RecyclerView
    listView.setLayoutManager(mLayoutManager);
    listView.setAdapter(adapter);
}

Установив mLayoutManager.setReverseLayout(true); - вы 're reverse the your layout и mLayoutManager.setStackFromEnd(true); позиционирует представление в верхней части вашего списка.

Миграция на RecyclerView проста. Ваш макет будет что-то вроде этого

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    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">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/my_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>

И в вашем build.gradle

dependencies {
    compile 'com.android.support:recyclerview-v7:23.4.0'
}

Вам нужно, чтобы FirebaseRecyclerAdapter можно было найти здесь, в FirebaseUI .

Примечание. Не используйте RecyclerView.LayoutManager, поскольку функции setReverseLayout и setStackFromEnd не будут найдены в RecyclerView.LayoutManager. Используйте LinearLayoutManager, как указано.

Обновить

Вот как вы можете обрабатывать события кликов ваших элементов в списке.

Вам нужно было объявить ViewHolder для реализации права RecyclerView? Просто добавьте еще одну функцию в свой класс ViewHolder, как показано ниже, и вызовите эту функцию после функций setText, которые у вас там есть.

public static class MyViewHolder extends RecyclerView.ViewHolder {
    View mView;

    public MyViewHolder(View itemView) {
        super(itemView);
        mView = itemView;
    }

    public void setClickEvent() {
        // Set the onClickListener on mView
        // mView.setOnClickListener(new OnClickListener)...
    }
}
13
ответ дан Reaz Murshed 22 August 2018 в 04:21
поделиться
  • 1
    У меня возникли проблемы с RecyclerView. Я предполагаю, что вы использовали мой оригинальный код, listView - это RecyclerView? Когда я устанавливаю адаптер (адаптер) в recyclerView, он не работает: set adapter (android.support.v7.widget.recyclerview.adapter) нельзя применить к (com.firebase.ui..FirebaseListAdapter & lt; java.util.Hashmap & gt; ;) – Alex Boullé 23 May 2016 в 20:18
  • 2
    Да, ваш listView RecyclerView, вы догадались, что это правильно. И жаль, что я допустил еще одну небольшую ошибку. Пожалуйста, см. Этот ответ от @FrankVanPuffelen stackoverflow.com/a/31122788/3145960 , чтобы узнать, как использовать FirebaseRecyclerAdapter для работы с RecyclerView. Я редактирую ответ. – Reaz Murshed 23 May 2016 в 20:24
  • 3
    Кажется, что он работает, как и в нем, он добавляет новейшее в начало. Я все еще немного зациклился на том, как обнаружить события щелчка на элементах в RecyclerView. Могли бы вы вкратце объяснить, как обнаружить события щелчка? В принципе, мне нужно открыть новый фрагмент, когда щелкнули один из элементов. Я работал с ListView. Спасибо за помощь. – Alex Boullé 23 May 2016 в 20:49
  • 4
    Обновлен ответ. Пожалуйста, смотрите. – Reaz Murshed 23 May 2016 в 21:13

Поскольку вы уже расширяете FirebaseListAdapter для реализации populateView, вы можете продолжить и переопределить getItem, чтобы инвертировать поиск элемента:

@Override
public HashMap getItem(int pos) {
    return super.getItem(getCount() - 1 - pos);
}

Если вы не используя RecyclerView, это простой способ отменить данные без расширения каких-либо классов, чем это необходимо. Очевидно, это изменит любой подкласс AdapterView, поддерживаемый этим адаптером, если вы решите его повторно использовать.

3
ответ дан Travis Christian 22 August 2018 в 04:21
поделиться
  • 1
    Лучший! Это самый простой способ выполнить задание в сочетании с orderByChild (). Благодарю. – RaySaraiva 11 July 2017 в 01:26
  • 2
    это работает как шарм! – user 4 January 2018 в 19:07
Другие вопросы по тегам:

Похожие вопросы: