0

I am creating an app I using search view in fragment to search recycler view ArrayList data but below method not showing the result Not show my filter result in recycler view How to show filter result in recycle view in the fragment. anyone tell me what changes below code to fix this problem please help me

Fragment

import in.getagf.pickuplines.Model.dataAdapter;
import in.getagf.pickuplines.Model.dataItem;


 /**
 * A simple {@link Fragment} subclass.
 */
public class LatestFragment extends Fragment {


private View myView;
private DatabaseReference RootRef, AdsRef;
private AdView adView;

private RecyclerView mRecyclerView;
dataAdapter mDataAdapter;
private RecyclerView.LayoutManager mDataLayoutManager;

public LatestFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    myView = inflater.inflate(R.layout.fragment_latest, container,     false);

    RootRef = FirebaseDatabase.getInstance().getReference().child("App_Data");
    AdsRef = FirebaseDatabase.getInstance().getReference().child("Apps Link").child("AdsUnitID");
    mRecyclerView = (RecyclerView) myView.findViewById(R.id.latest_recyclerView);
    mDataLayoutManager = new LinearLayoutManager(getActivity());
    mRecyclerView.setLayoutManager(mDataLayoutManager);

    mDataAdapter = new dataAdapter(getDataSetLines(), getActivity());
    mRecyclerView.setAdapter(mDataAdapter);
    getResult.clear();
    //   offlinedata();

    receiverData();
    return myView;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}


@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.home, menu);
    MenuItem item = menu.findItem(R.id.action_search);

    SearchView sv = (SearchView) MenuItemCompat.getActionView(item);
    sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String s) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newtext) {
            mDataAdapter.getFilter().filter(newtext);
            return false;
        }
    });
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // handle item selection
    switch (item.getItemId()) {
        case R.id.action_search:
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

private void receiverData()
{
    RootRef.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            if (dataSnapshot.exists() && !dataSnapshot.child("category").getValue().toString().equals("Good Night"))
            {

                String Lines = dataSnapshot.child("lines").getValue().toString();
                String Pic = dataSnapshot.child("pic").getValue().toString();
                String visite_id = dataSnapshot.getKey();
                dataItem obj = new dataItem(visite_id, Lines, Pic);
                getResult.add(obj);
                mDataAdapter.notifyDataSetChanged();
            }
        }

        @Override
        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

    AdsRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                String fB_Latest = dataSnapshot.child("fB_Latest").getValue(String.class);

                // Facebook Banner Ads
                adView = new AdView(getActivity(), fB_Latest, AdSize.BANNER_HEIGHT_50);
                LinearLayout adContainer = (LinearLayout) myView.findViewById(R.id.latest_facebook_ads);
                adContainer.addView(adView);
                adView.loadAd();
                // end
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

@Override
public void onDestroy() {
    if (adView != null) {
        adView.destroy();
    }
    super.onDestroy();
}

private ArrayList<dataItem> getResult = new ArrayList<dataItem>();
private List<dataItem> getDataSetLines() {
    return getResult;
}
}

dataAdapter

/**
 * Created by Vinay Singh on 16/02/2019.
 */



public class dataAdapter extends RecyclerView.Adapter<DataViewHolders>             
implements Filterable {

private List<dataItem> myList;
private  List<dataItem> myListFull;
private Context context;

public dataAdapter(List<dataItem> myList, Context context) {
    this.myList = myList;
    this.context = context;
    myListFull = new ArrayList<>(myList);
}

@Override
public DataViewHolders onCreateViewHolder(ViewGroup viewGroup, int position) {

    View layoutView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_view, null, false);
    RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    layoutView.setLayoutParams(lp);
    DataViewHolders rcv = new DataViewHolders(layoutView);

    return rcv;
}

@Override
public void onBindViewHolder(DataViewHolders holder, int position) {

    String lines = myList.get(position).getLines();
    holder.mLines.setText(myList.get(position).getLines());
    holder.mVisit_id.setText(myList.get(position).getVisite_id());
    if (myList.get(position).getPic().equals("default")) {
        Picasso.get().load(R.drawable.app_logo).into(holder.mImage);
    }else if (myList.get(position).getPic().equals("Funny"))
    {
        Picasso.get().load(R.drawable.funny).into(holder.mImage);
    }
    else if (myList.get(position).getPic().equals("Romantic"))
    {
        Picasso.get().load(R.drawable.romantic).into(holder.mImage);
    }
    else if (myList.get(position).getPic().equals("Chat Tips"))
    {
        Picasso.get().load(R.drawable.chat).into(holder.mImage);
    }
    else if (myList.get(position).getPic().equals("Good Morning"))
    {
        Picasso.get().load(R.drawable.goodmorning).into(holder.mImage);
    }
    else if (myList.get(position).getPic().equals("Motivation"))
    {
        Picasso.get().load(R.drawable.motivation).into(holder.mImage);
    }
    else if (myList.get(position).getPic().equals("Shayri"))
    {
        Picasso.get().load(R.drawable.shayari).into(holder.mImage);
    }
    else if (myList.get(position).getPic().equals("WhatsApp"))
    {
        Picasso.get().load(R.drawable.whatsapp).into(holder.mImage);
    }
    else if (myList.get(position).getPic().equals("Jokes"))
    {
        Picasso.get().load(R.drawable.jokes).into(holder.mImage);
    }
    else if (myList.get(position).getPic().equals("Good Night"))
    {
        Picasso.get().load(R.drawable.goodnight).into(holder.mImage);
    }
    else if (myList.get(position).getPic().equals("Chatting"))
    {
        Picasso.get().load(R.drawable.chatting).into(holder.mImage);
    }
    else
    {
        Picasso.get().load(R.drawable.app_logo).into(holder.mImage);
    }

}

@Override
public int getItemCount() {
    return this.myList.size();
}

@Override
public Filter getFilter() {
    return myListFilter;
}

private Filter myListFilter = new Filter() {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        String charString = constraint.toString();
        if (charString.isEmpty())
        {
            myListFull = myList;
        }
        else
        {
            List<dataItem> filteredList = new ArrayList<>();
            for (dataItem item : myListFull)
            {
                if (item.getLines().contains(charString)){
                    filteredList.add(item);
                }
            }
            myListFull = filteredList;
        }
        FilterResults results = new FilterResults();
        results.values = myListFull;
        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        myList.clear();
        myList.addAll((List) results.values);
        notifyDataSetChanged();
    }

};
}

2 Answers2

0
    List<dataItem> filteredList = new ArrayList<>();
    for (dataItem item : myList) // myListFull wrong
    {
        if (item.getLines().contains(charString)){
            filteredList.add(item);
        }
    }
    myListFull = filteredList;
fancyyou
  • 965
  • 6
  • 7
0

First Remove this code in your fragment

private ArrayList<dataItem> getResult = new ArrayList<dataItem>();
private List<dataItem> getDataSetLines() {
    return getResult;
}
}

and intialized ArrayList in above of onCreateView method and change this code in onCreateView method

mDataAdapter = new dataAdapter(getResult, getContext());

Now add this code in your Adapter

List<dataItem> filteredList = new ArrayList<>();
    for (dataItem item : myList) // myListFull wrong
    {
        if (item.getLines().contains(charString)){
            filteredList.add(item);
        }
    }
    myListFull = filteredList;

In your myListFull ArrayList to not add data of myList.

I hope this can help You!

Thank You.

Hardik Talaviya
  • 1,396
  • 5
  • 18