Finder in toolbar listiview android

0

I'm doing a search in a Listiview where I rescue the phone contacts. After many attempts I have not succeeded in this and I do not understand very well what could be the error. I'd appreciate your help. Here I attach my code.

MainActivity with BaseAdapter:

public class Contactos extends AppCompatActivity{

private ListView listView;
Toolbar toolbar;
private MyAppAdapter myAppAdapter;
private ArrayList<Item_contactos> postArrayList;
public static final int REQUEST_READ_CONTACTS = 79;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.contactos);
    listView = (ListView) findViewById(R.id.lista_contactos);
    listView.setEmptyView(findViewById(R.id.mensajevacio));
    postArrayList = new ArrayList<>();

    getSupportActionBar().hide();
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.inflateMenu(R.menu.menu_contactos);


    Cursor c = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+" ASC");
    CargarLista(c);
}

protected void CargarLista(Cursor c) {

    if (c != null && c.getCount() > 0) {
        try {
            HashSet<String> normalizedNumbersAlReady = new HashSet<>();
            int normalizedNumber = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER);
            int DisplayName = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
            int DisplayNumber = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
            int DisplayType = c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);


            while (c.moveToNext()){
                String normalized = c.getString(normalizedNumber);
                if (normalizedNumbersAlReady.add(normalized)) {
                    String nombre = c.getString(DisplayName);
                    String telefono = c.getString(DisplayNumber);
                    String tipo = c.getString(DisplayType);
                    String sType = "";
                    switch (tipo) {
                        case "0":
                            sType = "Otro";
                            break;
                        case "1":
                            sType = "Casa";
                            break;
                        case "2":
                            sType = "Movil";
                            break;
                        case "3":
                            sType = "Trabajo";


                    }


                    postArrayList.add(new Item_contactos(nombre, telefono, sType));
                }


                myAppAdapter = new MyAppAdapter(postArrayList,Contactos.this);
                listView.setAdapter(myAppAdapter);
            }


        }finally {
            c.close();
        }

    }

}



public class MyAppAdapter extends BaseAdapter {

    public class ViewHolder {
        TextView txtTitle,txtSubTitle,txtType;


    }

    public List<Item_contactos> parkingList;

    public Context context;
    ArrayList<Item_contactos> arraylist;

    private MyAppAdapter(List<Item_contactos> apps, Context context) {
        this.parkingList = apps;
        this.context = context;
        arraylist = new ArrayList<Item_contactos>();
        arraylist.addAll(parkingList);

    }

    @Override
    public int getCount() {
        return parkingList.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        View rowView = convertView;
        ViewHolder viewHolder;

        if (rowView == null) {
            LayoutInflater inflater = getLayoutInflater();
            rowView = inflater.inflate(R.layout.item_contactos, null);
            // configure view holder
            viewHolder = new ViewHolder();
            viewHolder.txtTitle = (TextView) rowView.findViewById(R.id.nombre_contact);
            viewHolder.txtSubTitle = (TextView) rowView.findViewById(R.id.telefono_contact);
            viewHolder.txtType = (TextView) rowView.findViewById(R.id.tipo_contact);
            rowView.setTag(viewHolder);

        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        viewHolder.txtTitle.setText(parkingList.get(position).getnombre() + "");
        viewHolder.txtSubTitle.setText(parkingList.get(position).getTelefono() + "");
        viewHolder.txtType.setText(parkingList.get(position).getTipo()+ "");
        return rowView;


    }

    public void filter(String charText) {

        charText = charText.toLowerCase(Locale.getDefault());

        parkingList.clear();
        if (charText.length() == 0) {
            parkingList.addAll(arraylist);

        } else {
            for (Item_contactos postDetail : arraylist) {
                if (charText.length() != 0 && postDetail.getnombre().toLowerCase(Locale.getDefault()).contains(charText)) {
                    parkingList.add(postDetail);
                }

                else if (charText.length() != 0 && postDetail.getTelefono().toLowerCase(Locale.getDefault()).contains(charText)) {
                    parkingList.add(postDetail);
                }
            }
        }
        notifyDataSetChanged();
    }
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_contactos, menu);
    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
    //*** setOnQueryTextFocusChangeListener ***
    searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {

        }
    });

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

        @Override
        public boolean onQueryTextSubmit(String query) {

            return false;
        }

        @Override
        public boolean onQueryTextChange(String searchQuery) {
            myAppAdapter.filter(searchQuery.toString().trim());
            listView.invalidate();
            return true;
        }
    });

    MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            // Do something when collapsed
            return true;  // Return true to collapse action view
        }

        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            // Do something when expanded
            return true;  // Return true to expand action view
        }
    });
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_search) {

        return true;
    }
    return super.onOptionsItemSelected(item);
}


}

Layout res / layout / contacts.xml

<?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"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?actionBarSize"
    app:title="Busca en contactos"
    app:titleTextAppearance="@style/ToolbarTextAppearance.Title"
    style="@style/MyToolbar2"
    >

  </android.support.v7.widget.Toolbar>
  <ListView
    android:id="@+id/lista_contactos"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"

    android:layout_below="@+id/toolbar" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/mensajevacio"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:text="Su lista de amigos se encuentra vacia."

    />



  </RelativeLayout>

res / layout / item_contacts.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
    android:layout_width="40dp"
    android:layout_height="40dp"
    android:id="@+id/photo"
    android:src="@drawable/ic_account"
    android:layout_marginTop="15dp"
    android:layout_marginLeft="20dp"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fontFamily="sans-serif-condensed"
    android:textStyle="bold"
    android:id="@+id/nombre_contact"
    android:textSize="17dp"
    android:layout_marginTop="20dp"
    android:layout_marginLeft="80dp"
    android:layout_marginBottom="10dp"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fontFamily="sans-serif-condensed"
    android:id="@+id/telefono_contact"
    android:textColor="@color/secondary_text"
    android:textSize="15dp"
    android:text="Numero"
    android:textStyle="italic"
    android:layout_marginTop="45dp"
    android:layout_marginLeft="80dp"
    android:layout_marginBottom="10dp"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fontFamily="sans-serif-condensed"
    android:id="@+id/tipo_contact"
    android:textColor="@color/secondary_text"
    android:textSize="15dp"
    android:text="Otro"
    android:layout_alignLeft="@+id/telefono_contact"
    android:layout_marginRight="20dp"
    android:paddingLeft="50dp"
    android:layout_marginLeft="60dp"
    android:layout_alignBaseline="@+id/telefono_contact"
    android:layout_alignBottom="@+id/telefono_contact" />



    </RelativeLayout>

en res / menu / menu_contacts.xml

<menu 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">
<item android:id="@+id/action_search"
    android:title="Search"
    android:icon="@drawable/ic_search"
    app:showAsAction="collapseActionView|always"
    app:actionViewClass="android.support.v7.widget.SearchView"
    android:layout_width="wrap_content" />
</menu>

This is my list of contacts in the toolbar I've done a searchView which I can not make work:

    
asked by flo 17.10.2017 в 00:34
source

0 answers