ExpandableListView
에 선택 (짧게 누르기)과 삭제 (길게 누르기)를 구현했습니다. 짧은 목록 항목 클릭 수는 onChildClick()
에 의해 처리되고 긴 클릭 수는 onCreateContextMenu()
에 의해 처리됩니다.Long-Click은 Listview의 컨텍스트 메뉴와 Android 7 장치의 선택을 모두 트리거합니다.
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;
mDeleteItemGroup = ExpandableListView.getPackedPositionGroup(info.packedPosition);
mDeleteItemChild = ExpandableListView.getPackedPositionChild(info.packedPosition);
menu.setHeaderTitle("some title");
MenuInflater inflater = mActivity.getMenuInflater();
inflater.inflate(R.menu.menu_my_view_context, menu);
}
위의 그림은 긴 클릭을 잘 처리 한 컨텍스트 메뉴 코드입니다. 문제는 스타일 가능성이 부족하여 일부 기기에서 더 긴 제목을 자르는 것입니다. 다음과 같이 그래서 표준 컨텍스트 메뉴 대신 사용자 지정 대화 상자를 사용 :
이@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;
mDeleteItemGroup = ExpandableListView.getPackedPositionGroup(info.packedPosition);
mDeleteItemChild = ExpandableListView.getPackedPositionChild(info.packedPosition);
String title = "some title";
ConfirmDeletePopupFragment confirmDeletePopupFragment = ConfirmDeletePopupFragment.newInstance(title);
confirmDeletePopupFragment.setTargetFragment(this, 0);
confirmDeletePopupFragment.show(getActivity().getSupportFragmentManager(), "tag");
}
이 여기에 안드로이드 7을 실행하는 넥서스 5 배를 제외한 모든 장치에서 잘 작동, 긴 클릭 상황에 맞는 메뉴와 선택을 모두 트리거 onChildClick
을 통해, 분명히 내가 원하는 것은 아닙니다.
내 사용자 지정 대화 상자를 사용하면서 항목을 선택하지 못하게하려면 어떻게해야합니까?
는 플래그는 상황에 맞는 메뉴가 이벤트를 처리하는 동안 선택을 음소거에 사용될 수 있지만 그 잘못 뭔가를 패치처럼 보인다. – jerry