1-) Android RMOS - Listview de arama yapmak actionBar a arama ekleme SearchView menu oluşturma
KAYNAK : http://codetheory.in/android-filters/
1-) Android RMOS - menu_arizalistesi.xml oluşturmak için -> menuiconu-> res-> menu -> new menu resource file
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/action_search"
app:actionLayout="@layout/activity_order_taker_list"
android:orderInCategory="5"
android:title="Search"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="always|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView" />
</menu>
2-) OrderTakerList.java
import android.support.v7.widget.SearchView;
public class OrderTakerList extends AppCompatActivity {
...
SearchView searchView;
MenuItem searchItem;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_arizalistesi, menu);
searchItem = menu.findItem(R.id.action_search);
searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) { // klavyedeki enter tuşuna basarsa buraya düşer
searchView.clearFocus();
return true;
}
@Override
public boolean onQueryTextChange(String newText) { // girilen stringi komple buraya yollar
Load_List(newText);
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
}
-------------------------------------------ADAPTER KISMINDA İSE-------------------------------------------
1-) Android RMOS - OrderTakerListItemAdapter.java
package com.ramazan.user.rmospersonel.Tools.Adapter;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.TextView;
import com.ramazan.user.rmospersonel.Classes.OrderTakerListItem;
import com.ramazan.user.rmospersonel.R;
import java.util.ArrayList;
// BaseAdapter implements Filterable { // bu şekildede olabilir
public class OrderTakerListItemAdapter extends ArrayAdapter<com.ramazan.user.rmospersonel.Classes.OrderTakerListItem> {
public ArrayList<OrderTakerListItem> mContacts, mList;
private Filter mContactsFilter;
public OrderTakerListItemAdapter(Context context, ArrayList<OrderTakerListItem> objects) {
super(context, 0, objects);
this.mList = objects;
this.mContacts = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (mList.size() <= position) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.layout_fault_item, parent, false);
convertView.setVisibility(View.GONE);
return convertView;
}
OrderTakerListItem item = mList.get(position);
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.layout_fault_item, parent, false);
}
convertView.setVisibility(View.VISIBLE);
convertView.setBackgroundColor(Color.parseColor(item.getListType().getColor()));
TextView txt_1 = (TextView) convertView.findViewById(R.id.txtOrderTaker_Fault1);
TextView txt_2 = (TextView) convertView.findViewById(R.id.txtOrderTaker_Fault2);
TextView txt_3 = (TextView) convertView.findViewById(R.id.txtOrderTaker_Fault3);
TextView txt_4 = (TextView) convertView.findViewById(R.id.txtOrderTaker_Fault4);
TextView txt_5 = (TextView) convertView.findViewById(R.id.txtOrderTaker_Fault5);
TextView txt_6 = (TextView) convertView.findViewById(R.id.txtAciklama);
TextView txt_7 = (TextView) convertView.findViewById(R.id.txtPersonelAta);
if (!item.getAtananPersonel().equals("") && !item.getSTATU().equals("OKEY") && !item.getSTATU().equals("BEKLEMEDE") && !item.getSTATU().equals("SERVIS")) {
convertView.setBackgroundColor(Color.rgb(247, 232, 15));
}
txt_1.setText(item.getFAULT() + " - " + item.getSUB_FAULT());
txt_2.setText(item.getDEPARTMENT() + " - " + item.getSUB_DEPARTMENT());
txt_3.setText("Bildiren : " + item.getDECLARATIVE());
txt_4.setText(item.getDATE() + " " + item.getTIME());
txt_5.setText(item.getPRIORTY());
txt_6.setText("Açıklama : \n" + item.getNOTE());
txt_7.setText("Atanan : \n" + item.getAtananPersonel());
return convertView;
}
@Override
public Filter getFilter() {
if (mContactsFilter == null)
mContactsFilter = new ContactsFilter();
return mContactsFilter;
}
private class ContactsFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint == null || constraint.length() == 0) {
results.values = mContacts;
results.count = mContacts.size();
} else {
ArrayList<OrderTakerListItem> filteredContacts = new ArrayList<OrderTakerListItem>();
for (OrderTakerListItem c : mContacts) {
String deger=c.getSUB_DEPARTMENT().toUpperCase()+c.getDEPARTMENT().toUpperCase()+c.getAtananPersonel().toUpperCase()+
c.getNOTE().toUpperCase()+c.getFAULT().toUpperCase()+c.getSUB_FAULT().toUpperCase();
String karsilastir=constraint.toString().toUpperCase();
if (deger.contains(karsilastir)) {
filteredContacts.add(c);
}
}
results.values = filteredContacts;
results.count = filteredContacts.size();
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
mList = (ArrayList<OrderTakerListItem>) results.values;
notifyDataSetChanged();
}
}
}
2-) MainActivty.java -> filter için -> Adapter.getFilter().filter(filter);
private void Load_List(String filter) { // "" gelirse tüm listeyi getir aksi takdirde arananı getir
if (Constants.mOrderTakerListItemArrayList != null) {
orderTakerListItemAdapter = new OrderTakerListItemAdapter(getApplicationContext(), Constants.mOrderTakerListItemArrayList); // dolu Arraylist olucak
lst_List.setAdapter(orderTakerListItemAdapter);
lst_List.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//mOrderTakerListItem = Constants.mOrderTakerListItemArrayList.get(position);
mOrderTakerListItem =orderTakerListItemAdapter.mList.get(position);
if (Constants.mOrderTakerUser.isMOBIL_CHECK()) {
if (mOrderTakerListType == Enums.OrderTakerListType.ONARILAN) {
asycStockList a = new asycStockList();
a.execute(mOrderTakerListItem.getID());
} else if (mOrderTakerListType == Enums.OrderTakerListType.ARIZA_ATAMA) {
// Toast.makeText(OrderTakerList.this, "ID : "+mOrderTakerListItem.getID()+" Arıza Atama Yapılacak.", Toast.LENGTH_LONG).show();
Intent intent_atama = new Intent(OrderTakerList.this, OrderTakerAtama.class);
intent_atama.putExtra("id", "" + mOrderTakerListItem.getID());
intent_atama.putExtra("aciklama", "" + mOrderTakerListItem.getNOTE());
startActivity(intent_atama);
} else
{
Intent updateIntent = new Intent(OrderTakerList.this, OrderTakerUpdate.class);
updateIntent.putExtra("INDEX", position);
startActivity(updateIntent);
}
} else {
Toast.makeText(getApplicationContext(), "Bu İşlemi Yapmaya Yetkiniz Yoktur...", Toast.LENGTH_SHORT).show();
}
}
});
if (!filter.equals("")) {
orderTakerListItemAdapter.getFilter().filter(filter);
}
}
}
3-) ARAMAYI TEMİZLEMEK İÇİN AŞAĞIDAKİNİ UYGULA MESALA ONRESUME METODUNDA
searchView.setQuery("", false);
searchView.clearFocus();
searchItem.collapseActionView();
4-) search buttonun kaybolması için aşağıdakini uygula
if (searchItem != null) searchItem.setVisible(false);