Вы можете использовать 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
Это не точное решение вашей проблемы с получением данных из 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)...
}
}
Поскольку вы уже расширяете FirebaseListAdapter
для реализации populateView
, вы можете продолжить и переопределить getItem
, чтобы инвертировать поиск элемента:
@Override
public HashMap getItem(int pos) {
return super.getItem(getCount() - 1 - pos);
}
Если вы не используя RecyclerView
, это простой способ отменить данные без расширения каких-либо классов, чем это необходимо. Очевидно, это изменит любой подкласс AdapterView
, поддерживаемый этим адаптером, если вы решите его повторно использовать.
listView
RecyclerView
, вы догадались, что это правильно. И жаль, что я допустил еще одну небольшую ошибку. Пожалуйста, см. Этот ответ от @FrankVanPuffelen stackoverflow.com/a/31122788/3145960 , чтобы узнать, как использоватьFirebaseRecyclerAdapter
для работы сRecyclerView
. Я редактирую ответ. – Reaz Murshed 23 May 2016 в 20:24