Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在筛选数据后重新绑定菜单项Click项上的SwipMenuListView?_Android_Listview - Fatal编程技术网

Android 如何在筛选数据后重新绑定菜单项Click项上的SwipMenuListView?

Android 如何在筛选数据后重新绑定菜单项Click项上的SwipMenuListView?,android,listview,Android,Listview,我有SwipeMenuListView的片段。数据来自API。我在片段中绑定SwipeMenuList的按钮,并将对象发送到适配器以获取 一切都很好 但在过滤后,listview按钮被破坏。当我按下过滤列表视图中的配置文件按钮时,应用程序会打开错误的配置文件 所以我的问题是如何更新按钮的位置 notifyDataSetChanged和InvalidateView不适用于我 public void setupSwipeList() { adapter = new SearchCardA

我有SwipeMenuListView的片段。数据来自API。我在片段中绑定SwipeMenuList的按钮,并将对象发送到适配器以获取

一切都很好

但在过滤后,listview按钮被破坏。当我按下过滤列表视图中的配置文件按钮时,应用程序会打开错误的配置文件

所以我的问题是如何更新按钮的位置

notifyDataSetChanged和InvalidateView不适用于我

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;
        }
    });
public void setupSwipeList(){
adapter=新的SearchCardAdapter(getContext(),arrayList,a);
最终SwipeMenuCreator=新SwipeMenuCreator(){
@凌驾
创建公共空白(SwipMenu菜单){
//创建“打开”项
SwipeMenuItem profileItem=新SwipeMenuItem(
getContext());
//设置项目背景
外形项目.背景(新的彩色可绘制(颜色为rgb(38153251));
//设置项目宽度
profileItem.setWidth(300);
//设置项目标题
profileItem.setTitle(“概要”);
//设置项目标题字体大小
profileItem.setTitleSize(18);
profileItem.setIcon(R.drawable.ic_配置文件);
//设置项目标题字体颜色
profileItem.setTitleColor(颜色:白色);
//添加到菜单
menu.addMenuItem(profileItem);
SwipeMenuItem phoneItem=新SwipeMenuItem(
getContext());
//设置项目背景
phoneItem.setBackground(新的可着色(Color.rgb(38153251));
//设置项目宽度
设置宽度(300);
//设置项目标题
phoneItem.setTitle(“手机通话”);
//设置项目标题字体大小
phoneItem.setTitleSize(18);
phoneItem.setIcon(R.drawable.ic_电话);
//设置项目标题字体颜色
phoneItem.setTitleColor(颜色:白色);
//添加到菜单
menu.addMenuItem(phoneItem);
//创建“删除”项
SwipeMenuItem requestItem=新SwipeMenuItem(
getContext());
//设置项目背景
requestItem.setBackground(新的彩色绘图(Color.rgb(38153251));
//设置项目宽度
requestItem.setWidth(300);
//设置项目标题
requestItem.setTitle(“请求”);
//设置项目标题字体大小
requestItem.setTitleSize(18);
requestItem.setIcon(R.drawable.ic_请求);
//设置项目标题字体颜色
requestItem.setTitleColor(Color.WHITE);
//添加到菜单
menu.addMenuItem(请求项);
}
};
//对
listView.setSwipeDirection(SwipeMenuListView.DIRECTION_RIGHT);
//左
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
listView.smoothOpenMenu(i);
}
});
listView.setSwipeDirection(SwipeMenuListView.DIRECTION_左);
setMenuCreator(创建者);
setAdapter(适配器);
最终捆绑=新捆绑();
setOnMenuItemClickListener(新的SwipMenuListView.OnMenuItemClickListener(){
@凌驾
公共布尔onMenuItemClick(整数位置、开关菜单、整数索引){
开关(索引){
案例0:
//打开
SpecialistFragment postobj=新的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();
打破
案例1:
Toast.makeText(getContext(),“CALL”,Toast.LENGTH_SHORT.show();
意向意向=新意向(意向.行动拨号);
setData(Uri.parse(“tel:”+“+”+“+arrayList.get(position.getPhone()));
getActivity().getApplicationContext().startActivity(意图);
打破
案例2:
SendRequestFragment obj=新的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());
对象setArguments(bundle);
fragmentManager=getActivity().getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame,obj).addToBackStack(null.commit();
打破
}
//false:关闭菜单;true:不关闭菜单
返回false;
}
});

这个问题是因为我调用了
arrayList.get(position)
而不是
adapter.getItem(position)

当listView被过滤时,适配器有另一个被过滤的数据,并且它没有与SwipeMenuListView连接。所以我们应该调用
adapter.getItem(position)
来获取相关数据

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;
        }
    });