Java MultiChoiceModelListener不工作
我正在尝试为从Java MultiChoiceModelListener不工作,java,android,listview,Java,Android,Listview,我正在尝试为从列表视图中选择多个项目实现MultichoiceModelListener。我目前的进展如下所示。但它不起作用。即使长时间按压,它也不起作用。我的代码中有什么遗漏或错误吗?任何帮助都将不胜感激 public class FragmentFavorite extends Fragment { ListView lvFavoriteItems; Activity mActivity = null; Context mContext; ArrayList
列表视图中选择多个项目实现MultichoiceModelListener
。我目前的进展如下所示。但它不起作用。即使长时间按压,它也不起作用。我的代码中有什么遗漏或错误吗?任何帮助都将不胜感激
public class FragmentFavorite extends Fragment {
ListView lvFavoriteItems;
Activity mActivity = null;
Context mContext;
ArrayList<String> names = new ArrayList<>(Arrays.asList("My name is a", "My name is b",
"My name is c", "My name is d", "My name is e", "My name is f"));
ArrayList<String> phone = new ArrayList<>(Arrays.asList("9895653263", "9895653264", "9895653265",
"9895653266", "9895653267", "9895653267"));
@Override
public void onAttach(Context context) {
super.onAttach(context);
if(mActivity == null) {
this.mActivity = getActivity();
}
this.mContext = context;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.favorite_list, container, false);
lvFavoriteItems = (ListView) root.findViewById(R.id.lv_item_list);
FavoriteAdapter fav = new FavoriteAdapter();
lvFavoriteItems.setAdapter(fav);
lvFavoriteItems.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
lvFavoriteItems.setMultiChoiceModeListener(new FavMultiChoiceModeListener());
return root;
}
private class FavoriteAdapter extends BaseAdapter {
@Override
public int getCount() {
return names.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
View listItem;
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
listItem = inflater.inflate(R.layout.contact_item_2_line, null);
} else {
listItem = convertView;
}
TextView tv1 = (TextView) listItem.findViewById(R.id.tv_item_name);
tv1.setText(names.get(position));
TextView tv2 = (TextView) listItem.findViewById(R.id.tv_phone);
tv2.setText(phone.get(position));
listItem.setId(position);
return listItem;
} }
private class FavMultiChoiceModeListener implements ListView.MultiChoiceModeListener {
@Override
public void onItemCheckedStateChanged(ActionMode mode, int i, long l, boolean b) {
final int checkedCount = lvFavoriteItems.getCheckedItemCount();
mode.setSubtitle("" + checkedCount + " items selected ");
}
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
MenuInflater inflater = mActivity.getMenuInflater();
inflater.inflate(R.menu.selection_menu, menu);
actionMode.setTitle("Select Items");
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
return true;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
Toast.makeText(mActivity, "Clicked " + menuItem.getTitle(),
Toast.LENGTH_SHORT).show();
return true;
}
@Override
public void onDestroyActionMode(ActionMode actionMode) {
}
}
}
公共类片段{
ListView lvFavoriteItems;
Activity mActivity=null;
语境;
ArrayList names=新的ArrayList(Arrays.asList)(“我的名字是a”,“我的名字是b”,
“我的名字是c”,“我的名字是d”,“我的名字是e”,“我的名字是f”);
ArrayList phone=新的ArrayList(Arrays.asList(“9895653263”、“9895653264”、“9895653265”),
"9895653266", "9895653267", "9895653267"));
@凌驾
公共void-onAttach(上下文){
super.onAttach(上下文);
if(mActivity==null){
this.mActivity=getActivity();
}
this.mContext=上下文;
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根=充气机。充气(R.layout.favorite\u列表,容器,false);
lvFavoriteItems=(ListView)root.findViewById(R.id.lv\u item\u list);
FavoriteAdapter fav=新的FavoriteAdapter();
lvFavoriteItems.setAdapter(fav);
lvFavoriteItems.setChoiceMode(ListView.CHOICE\u MODE\u MULTIPLE\u MODE);
SetMultichoiceModelListener(新FAVMultiChoiceModelListener());
返回根;
}
私有类FavoriteAdapter扩展了BaseAdapter{
@凌驾
public int getCount(){
返回names.size();
}
@凌驾
公共对象getItem(int i){
返回null;
}
@凌驾
公共长getItemId(int i){
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组视图组){
查看列表项;
LayoutFlater充气器=(LayoutFlater)mContext
.getSystemService(上下文布局\充气机\服务);
if(convertView==null){
listItem=充气机。充气(R.layout.contact\u item\u 2\u行,空);
}否则{
listItem=convertView;
}
TextView tv1=(TextView)listItem.findViewById(R.id.tv\u item\u name);
tv1.setText(names.get(position));
TextView tv2=(TextView)listItem.findViewById(R.id.tv\u电话);
tv2.setText(phone.get(position));
setId(位置);
返回列表项;
} }
私有类FavMultiChoiceModelListener实现ListView.MultiChoiceModelListener{
@凌驾
public void onItemCheckedStateChanged(ActionMode模式、int i、long l、boolean b){
final int checkedCount=lvFavoriteItems.getCheckedItemCount();
mode.setSubtitle(“+checkedCount+”所选项目”);
}
@凌驾
公共布尔onCreateActionMode(ActionMode ActionMode,菜单){
MenuInflater充气机=mActivity.getMenuInflater();
充气机。充气(右菜单。选择菜单,菜单);
actionMode.setTitle(“选择项”);
返回true;
}
@凌驾
公共布尔onPrepareActionMode(ActionMode ActionMode,菜单){
返回true;
}
@凌驾
公共布尔值onActionItemClicked(ActionMode ActionMode,MenuItem MenuItem){
Toast.makeText(mActivity,“单击”+menuItem.getTitle(),
吐司。长度(短)。show();
返回true;
}
@凌驾
公共void onDestroyActionMode(ActionMode ActionMode){
}
}
}
由于您是从BaseAdapter进行扩展,您可能需要在getView
方法中调用convertView.setLongClickable(true)
。您好,您解决了这个问题吗?