تطبيق إعلانات بأندرويد و firebase الجزء السادس


فهاد الجزء السادس من تطبيق إعلانات بأندرويد و firebase غادي نشوفوا كيفاش نزيدو لملفات لي غادي يمكنوا المستخدم من مشاهدة الإعلانات لي زاد فالقائمة المفضلة ديالو ولي غادي يمكنوه من بعد يحيد لي بغا ويخلي لي بغا منبعد غادي نزيدو الملفات لي خاصين بالبحث ولي غادي يمكنوا المستخدم من البحث على إعلانات.

نظرة سريعة بالفيديو

1- إضافة ملف عرض الإعلانات المفضلة

باش نزيد ملف عرض الإعلانات المفضلة سير ل dossier java زيد activity جديدة سميها FavActivity منبعد سير ل dossier res/layout فيه غادي تلقى الملف activity_fav.xml لي فيه زدنا Recycler View لي غادي تعرض فيها الإعلانات منبعد عندي واحد RelativeLayout لي فيها TextView و ImageView لي غادي يتعرضوا يلا مكان عندنا حتى إعلان فالقائمة المفضلة الكود ديال الملف هو :

                                <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:background="#EFF0F1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.belasri.hiresell.FavActivity">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <include layout="@layout/toolbar"></include>
    </RelativeLayout>
    <android.support.v7.widget.RecyclerView
        android:id="@+id/liste"
        android:layout_marginTop="55dp"
        android:padding="5dp"
        android:layout_marginBottom="55dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v7.widget.RecyclerView>
   <RelativeLayout
       android:id="@+id/emptyFav"
       android:layout_width="match_parent"
       android:background="@color/white"
       android:visibility="gone"
       android:layout_height="match_parent">
       <TextView
           android:id="@+id/empty_view"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:textColor="@color/colorPrimary"
           android:layout_centerInParent="true"
           android:layout_below="@+id/emptyHeart"
           android:textSize="30sp"
           android:text="Empty" />
       <ImageView
           android:id="@+id/emptyHeart"
           android:src="@drawable/heart"
           android:tint="@color/colorPrimary"
           android:layout_marginRight="10dp"
           android:layout_centerInParent="true"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content" />
   </RelativeLayout>
</android.support.design.widget.CoordinatorLayout>
                            

2- الملف FAVLISTVIEWADAPTER.JAVA

منبعد فنفس dossier لي هو java وف dossier helpers  زيد ملف جديد سميه FavListViewAdapter.java ولي المهمة ديالو كياخد les favoris  لي رسلنالو وكياخد ايضا الملف list_item.xml وكيسترجع TexView ول Image لي فيه وكيزيد les noms ف TextView وles images فل Image راه سبق درنا نفس الطريقة فدروس سابقة الكود ديال الملف هو : 


                                package helpers;

import android.app.Activity;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.belasri.hiresell.R;
import com.squareup.picasso.Picasso;

import java.util.ArrayList;
import java.util.List;

import models.AdInfo;

/**
 * Created by belasri on 17/12/2017.
 */

public class FavListViewAdapter extends RecyclerView.Adapter<FavListViewAdapter.MyViewHolder>  {
    private List<AdInfo> mData;
    private LayoutInflater mInflater;
    private Activity activity;
    public FavListViewAdapter(Activity context, List<AdInfo>data){
        this.activity = context;
        this.mData = data;
        this.mInflater = LayoutInflater.from(context);
    }
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = mInflater.inflate(R.layout.list_item,parent,false);
        MyViewHolder holder = new MyViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        AdInfo currentObjs = mData.get(position);
        holder.setData(currentObjs,position);
    }

    @Override
    public int getItemCount() {
        return mData.size();
    }
    class MyViewHolder extends RecyclerView.ViewHolder{
        AdInfo adInfo;
        TextView title;
        TextView city;
        ImageView imageView;
        int position;
        public MyViewHolder(View itemView) {
            super(itemView);
            title = (TextView) itemView.findViewById(R.id.title);
            city = (TextView) itemView.findViewById(R.id.city);
            imageView = (ImageView) itemView.findViewById(R.id.image);
        }

        public void setData(AdInfo currentObjs, int position) {
            this.title.setText(currentObjs.getTitle());
            this.city.setText(currentObjs.getCity());
            Picasso.with(activity).load(currentObjs.getImageUrl()).into(this.imageView);
            this.position = position;
            this.adInfo = currentObjs;
        }
    }
    public AdInfo getAd(int position){
        return (mData != null) ? mData.get(position) : null;
    }
}
                            

3- عرض الإعلانات المفضلة

ف dossier java كاين الملف FavActivity.java فيه كنسترجع RecyclerView لي زدنا بل id ديالها منبعد عندي ArrayList سميتها dbaAds كتاخد les favoris ولي غادي نسترجعوهم من la base de données منبعد مكن créer l'objet من la classe DataBaseHandler وعندي ايضا référence ل la classe FavListViewAdapter منبعد عندي ل fonction getData لي كندير بها ل connexion مع la base منبعد كنخدم بل fonction getFavs لي كت retourner les favoris لي عندنا فقاعدة البيانات وكنزيد ArrayList أخرى لي كتاخد les favoris لي استرجعنا من بعد كنخدم ب for وكن créer l'objet من la classe AdInfo وكنزيد كل إعلان فل ArrayList dbaAds منبعد مكنتحقق يلا مكان عندي حتى شي favoris كنعرض TextView لي كتقول حتى شي favoris مكاين كان عندي les favoris كنرسلهم لل  FavListViewAdapter لي غادي يمكن من عرضهم ف ListView لي زدنا فل activity_fav.xml الكود ديال الملف هو : 

                                package com.example.belasri.hiresell;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.RelativeLayout;

import java.util.ArrayList;

import helpers.FavListViewAdapter;
import models.AdInfo;
import models.DataBaseHandler;

import static com.example.belasri.hiresell.R.id.recyclerView;

public class FavActivity extends AppCompatActivity {
    private DataBaseHandler dba;
    private ArrayList<AdInfo> dbaAds = new ArrayList<>();
    private FavListViewAdapter adsAdapter;
    private RecyclerView liste;
    private Toolbar toolbar;
    private RecyclerViewItemClickSupport recyclerViewItemClickSupport;
    private RelativeLayout relativeLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fav);
        liste = (RecyclerView) findViewById(R.id.liste);
        liste.setLayoutManager(new GridLayoutManager(this,2));
        liste.setItemAnimator(new DefaultItemAnimator());
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        relativeLayout = (RelativeLayout) findViewById(R.id.emptyFav);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getData();
    }

    @Override
    protected void onStart() {
        super.onStart();
        adsAdapter.notifyDataSetChanged();
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        finish();
    }

    public void getData(){
        dbaAds.clear();
        dba = new DataBaseHandler(getApplicationContext());
        ArrayList<AdInfo> favsFromDb = dba.getFavs();
        for(int i = 0; i < favsFromDb.size() ; i++){
            String title = favsFromDb.get(i).getTitle();
            String city = favsFromDb.get(i).getCity();
            String image  = favsFromDb.get(i).getImageUrl();
            String ad_id = favsFromDb.get(i).getAdId();
            AdInfo adInfo = new AdInfo();
            adInfo.setTitle(title);
            adInfo.setCity(city);
            adInfo.setImageUrl(image);
            adInfo.setAdId(ad_id);
            dbaAds.add(adInfo);
        }
        dba.close();
        if(dbaAds.isEmpty()){
            liste.setVisibility(View.GONE);
            relativeLayout.setVisibility(View.VISIBLE);
        }else {
            liste.setVisibility(View.VISIBLE);
            relativeLayout.setVisibility(View.GONE);
        }
        //set the adapter
        adsAdapter = new FavListViewAdapter(FavActivity.this,dbaAds);
        liste.setAdapter(adsAdapter);
        adsAdapter.notifyDataSetChanged();
        recyclerViewItemClickSupport.addTo(liste).setOnItemClickListener(new RecyclerViewItemClickSupport.OnItemClickListener() {
            @Override
            public void onItemClicked(RecyclerView recyclerView, int position, View v) {
                Intent intent = new Intent(FavActivity.this,AdDetails.class);
                intent.putExtra("ad_id",adsAdapter.getAd(position).getAdId());
                startActivity(intent);
            }
        });
        recyclerViewItemClickSupport.addTo(liste).setOnItemLongClickListener(new RecyclerViewItemClickSupport.OnItemLongClickListener() {
            @Override
            public void onItemLongClicked(RecyclerView recyclerView, int position, View v) {

            }
        });
    }
}
                            

4- إضافة ملف البحث عن الإعلانات

باش نمكن المستخدم من البحث على الإعلانات لي بغى غادي نزيد activity جديدة دائما ف dossier java سميها SearchActivity منبعد سير ل res/layout فيه غادي تلقى ملف سميتو activity_result فيه غادي نزيد toolbar لي هي  la barre ديال التطبيق فقط الكود ديال الملف هو : 

                                    <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/search_view"
        android:orderInCategory="1"
        android:icon="@android:drawable/ic_menu_search"
        android:title="search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always" />
</menu>
                                

5- إضافة الملف search_view.xml

منبعد غادي نمشي ل dossier menu لي ف res غادي نزيد فيه ملف نسميه  search_view.xml هادا الملف لي غادي تكون فيه ل icone ديال البحث ولي منبعد غادي نزيدو الكود لي غادي يمكن من إضافة حقل البحث الكود ديال الملف هو :

                                    <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/search_view"
        android:orderInCategory="1"
        android:icon="@android:drawable/ic_menu_search"
        android:title="search"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always" />
</menu>
                                


بحث في الموقع


إشترك للتوصل بالجديد