방향 변경시 동작 모드의 상태를 복원하려고합니다. 하지만 제대로 작동하지 않습니다. # 3, # 4 선택에, 단계 아래의 순서를 따라가 손상받을 :방향 변경시 항목 선택 유지
- 긴 항목을 클릭 - 항목이 강조 표시, 상황에 맞는 작업 표시 줄이 제목으로 표시하는 것은 "선택 1"을 보여줍니다. 좋아 보인다.
- 휴대 전화를 가로 방향으로 돌리십시오. 변경되지 않습니다. 좋아 보인다. 세로로 다시 전화를 돌려
- - 항목이 강조되지 않고, 상황에 맞는 작업 표시 줄이 사라
- 긴 항목을 클릭 - 항목을 상황에 맞는 작업 표시 줄이 제목을 보여줍니다 강조
myListView.getCheckedItemCount()
"0 선택"이 표시됩니다 onSaveInstanceState()
에서 # 3에서 0을 반환합니다. 그것이 바로 문제가 시작되는 곳입니다.
(지원 라이브러리를 사용하여) 어떤 부분에서 잘못 했습니까?
@Override
public void onSaveInstanceState(Bundle outState) {
//check if any items are selected
if (myListView.getCheckedItemCount() > 0) {
//get the list of selected items and convert it to an int Array
//because SparseBooleanArray cannot be stored in a bundle
SparseBooleanArray selectedItems = myListView.getCheckedItemPositions();
int[] selectedItems_intArray = new int[myListView.getCheckedItemCount()];
for (int i = 0; i < selectedItems.size(); i++) {
if (selectedItems.valueAt(i) == false)
continue;
selectedItems_intArray[i] = selectedItems.keyAt(i);
}
outState.putIntArray(KEY_CHECKED_ITEMS, selectedItems_intArray);
}
}
@Override
public void onViewStateRestored(Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
if (savedInstanceState != null) {
int[] checkedItems = savedInstanceState.getIntArray(KEY_CHECKED_ITEMS);
if (checkedItems != null) {
actionMode = ((ActionBarActivity) getActivity()).startSupportActionMode(new ContextualActionBarActionModeCallBack());
for (int i = 0; i < checkedItems.length; i++) {
myListView.setItemChecked(checkedItems[i], true);
}
actionMode.setTitle(myListView.getCheckedItemCount() + " selected");
}
}
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
myListView = (ListView) getActivity().findViewById(R.id.myListView);
adpt = new myCustomCursorAdapter(getActivity());
myListView.setAdapter(adpt);
//Choice mode is allowed only after a long click
//disabling it on first time load
myListView.setChoiceMode(ListView.CHOICE_MODE_NONE);
myListView.setOnItemLongClickListener(new OnItemLongClickListener(){
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id){
if(actionMode == null){
//Start the action mode
actionMode = ((ActionBarActivity)getActivity()).startSupportActionMode(new ContextualActionBarActionModeCallBack());
myLisVIew.setItemChecked(position, true);
actionMode.setTitle(myListView.getCheckedItemCount() + " selected");
return true;
}
else return false;
}
});
}
@Override
public void onResume(){
super.onResume();
getLoaderManager().initLoader(0,null,this);
}
private class ContextualActionBarActionModeCallBack implements ActionMode.Callback{
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.mycontextmenu, menu);
myListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}
...
...
}
의 ListView 레이아웃 요소 :
<ListView
android:id="@+id/myListView"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_alignParentTop="true"
android:listSelector="@android:color/transparent"
android:stackFromBottom="true"
android:layout_above="@id/layout_input"
android:divider="#00000000"
/>
android : configChanges = "orientation | screenSize"를 사용하고 있기 때문에 오리엔테이션 변경에서 내 활동 및 조각이 재생성되지 않으므로 listview도 다시 작성하면 안됩니다. – JosephM