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