Q:

How to rebind SwipeMenuListView onMenuItemClick items after filtering data?

I've got fragment with SwipeMenuListView. Data comes from API. I'm binding buttons of SwipeMenuList in fragment and sending objects to Adapter to get 
this
Everything is fine
But after filtering listview buttons are broken. When I press Profile button in filtered listview, app opens wrong profile
Filtered data
So my question is how to update position of buttons?
notifyDataSetChanged and invalidateViews don't work for me.
public void setupSwipeList() {
    adapter = new SearchCardAdapter(getContext(), arrayList, a);
    final SwipeMenuCreator creator = new SwipeMenuCreator() {

        @Override
        public void create(SwipeMenu menu) {
            // create "open" item
            SwipeMenuItem profileItem = new SwipeMenuItem(
                    getContext());
            // set item background
            profileItem.setBackground(new ColorDrawable(Color.rgb(38, 153, 251)));
            // set item width
            profileItem.setWidth(300);
            // set item title
            profileItem.setTitle("Profile");
            // set item title fontsize
            profileItem.setTitleSize(18);
            profileItem.setIcon(R.drawable.ic_profile);
            // set item title font color
            profileItem.setTitleColor(Color.WHITE);
            // add to menu
            menu.addMenuItem(profileItem);
            SwipeMenuItem phoneItem = new SwipeMenuItem(
                    getContext());
            // set item background
            phoneItem.setBackground(new ColorDrawable(Color.rgb(38, 153, 251)));
            // set item width
            phoneItem.setWidth(300);
            // set item title
            phoneItem.setTitle("Mobile call");
            // set item title fontsize
            phoneItem.setTitleSize(18);
            phoneItem.setIcon(R.drawable.ic_phone);
            // set item title font color
            phoneItem.setTitleColor(Color.WHITE);
            // add to menu
            menu.addMenuItem(phoneItem);

            // create "delete" item
            SwipeMenuItem requestItem = new SwipeMenuItem(
                    getContext());
            // set item background
            requestItem.setBackground(new ColorDrawable(Color.rgb(38, 153, 251)));
            // set item width
            requestItem.setWidth(300);
            // set item title
            requestItem.setTitle("Request");
            // set item title fontsize
            requestItem.setTitleSize(18);
            requestItem.setIcon(R.drawable.ic_request);
            // set item title font color
            requestItem.setTitleColor(Color.WHITE);
            // add to menu
            menu.addMenuItem(requestItem);
        }
    };

    // Right
    listView.setSwipeDirection(SwipeMenuListView.DIRECTION_RIGHT);
    // Left
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            listView.smoothOpenMenu(i);
        }
    });
    listView.setSwipeDirection(SwipeMenuListView.DIRECTION_LEFT);
    listView.setMenuCreator(creator);
    listView.setAdapter(adapter);
    final Bundle bundle = new Bundle();
    listView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
            switch (index) {
                case 0:
                    // open
                    SpecialistFragment postobj = new SpecialistFragment();
                    bundle.putString("spec_id", arrayList.get(position).getId());
                    bundle.putString("phone", arrayList.get(position).getPhone());
                    postobj.setArguments(bundle);
                    android.support.v4.app.FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
                    fragmentManager.beginTransaction().replace(R.id.content_frame, postobj).addToBackStack(null).commit();
                    break;
                case 1:
                    Toast.makeText(getContext(), "CALL", Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(Intent.ACTION_DIAL);
                    intent.setData(Uri.parse("tel:" + "+" + arrayList.get(position).getPhone()));
                    getActivity().getApplicationContext().startActivity(intent);
                    break;
                case 2:
                    SendRequestFragment obj = new SendRequestFragment();
                    bundle.putString("spec_id", arrayList.get(position).getId());
                    bundle.putString("spec_name", arrayList.get(position).getName());
                    bundle.putSerializable("categories", arrayList.get(position).getCategories());
                    bundle.putSerializable("districts", arrayList.get(position).getDistricts());
                    obj.setArguments(bundle);
                    fragmentManager = getActivity().getSupportFragmentManager();
                    fragmentManager.beginTransaction().replace(R.id.content_frame, obj).addToBackStack(null).commit();
                    break;
            }
            // false : close the menu; true : not close the menu
            return false;
        }
    });

A:

This problem was because I had called arrayList.get(position) instead of  adapter.getItem(position)
When listView was filtered, adapter had another filtered data and it's not connected with SwipeMenuListView. So we should call adapter.getItem(position) to get relevant data.
listView.setOnMenuItemClickListener(new SwipeMenuListView.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(int position, SwipeMenu menu, int index) {
            switch (index) {
                case 0:
                    // open
                    SpecialistFragment postobj = new SpecialistFragment();
                    bundle.putString("spec_id", adapter.getItem(position).getId());
                    bundle.putString("phone", adapter.getItem(position).getPhone());
                    postobj.setArguments(bundle);
                    android.support.v4.app.FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
                    fragmentManager.beginTransaction().replace(R.id.content_frame, postobj).addToBackStack(null).commit();
                    break;
                case 1:
                    Toast.makeText(getContext(), "CALL", Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(Intent.ACTION_DIAL);
                    intent.setData(Uri.parse("tel:" + "+" + adapter.getItem(position).getPhone()));
                    getActivity().getApplicationContext().startActivity(intent);
                    break;
                case 2:
                    SendRequestFragment obj = new SendRequestFragment();
                    bundle.putString("spec_id", adapter.getItem(position).getId());
                    bundle.putString("spec_name", adapter.getItem(position).getName());
                    bundle.putSerializable("categories", adapter.getItem(position).getCategories());
                    bundle.putSerializable("districts", adapter.getItem(position).getDistricts());
                    obj.setArguments(bundle);
                    fragmentManager = getActivity().getSupportFragmentManager();
                    fragmentManager.beginTransaction().replace(R.id.content_frame, obj).addToBackStack(null).commit();
                    break;
            }
            // false : close the menu; true : not close the menu
            return false;
        }
    });

