Android:onItemCheckedStateChanged只调用一次

时间:2017-03-16 22:15:08

标签: java android android-menu

片段类:

public class MultiFragmentListContent extends ListFragment
{
ListView listView;
ActionMode actionMode;
ArrayAdapter<String> arrayAdapter;
List<String> stringList;
Set<String> checkList;
AbsListView.MultiChoiceModeListener choiceModeListener = null;

@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    super.onCreateView(inflater,container,savedInstanceState);
    View rootView = inflater.inflate(R.layout.fragment, container, false);
    return rootView;
}

@Override
public void onActivityCreated(Bundle savedInstanceState)
{
    super.onActivityCreated(savedInstanceState);
    checkList = new HashSet<>();
    stringList = new LinkedList<>();
    stringList.add("A");
    stringList.add("B");
    stringList.add("C");
    stringList.add("D");
    stringList.add("E");
    listView = getListView();
    arrayAdapter = new ArrayAdapter<String>(getActivity(),R.layout.string,stringList);
    listView.setAdapter(arrayAdapter);

    choiceModeListener = new AbsListView.MultiChoiceModeListener()
    {
        @Override
        public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked)
        {
            if(checked)
                checkList.add(stringList.get(position));
            else
                checkList.remove(stringList.get(position));
        }

        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu)
        {
            actionMode = mode;
            MenuInflater menuInflater = mode.getMenuInflater();
            menuInflater.inflate(R.menu.contentmenu2,menu);
            arrayAdapter = new ArrayAdapter<String>(getActivity(),R.layout.checkbox,stringList);
            listView.setAdapter(arrayAdapter);
            return true;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return true;
        }

        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item)
        {
            switch(item.getItemId())
            {
                case R.id.contextmenu2:
                    for(String k : checkList)
                    {
                        stringList.remove(k);
                        Log.i(k,k);
                    }
                    actionMode.finish();
                    break;
            }
            return true;
        }

        @Override
        public void onDestroyActionMode(ActionMode mode)
        {
            arrayAdapter = new ArrayAdapter<String>(getActivity(),R.layout.string,stringList);
            listView.setAdapter(arrayAdapter);
            checkList.removeAll(checkList);
        }
    };

    listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
    listView.setMultiChoiceModeListener(choiceModeListener);

    listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener()
    {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
        {
            listView.setMultiChoiceModeListener(choiceModeListener);
            return true;
        }
    });

}
}

我注意到方法onItemCheckedStateChanged只被调用一次。

在该方法奏效之前,我的意思是它始终被称为。

我试图在网上找到,但我找不到解决方案。

我认为问题是

listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 

但我不知道该把它放在哪里。如果我把它放在其他地方,应用程序崩溃。

1 个答案:

答案 0 :(得分:0)

如果你在onItemCheckedStateChanged中为你的控件创建一个布尔值,那么可以调用,调用总是被调用,但是会有控制权。

相关问题