SearchView 클래스를 확장하여 onKeyDown() 메서드를 재정의하려고합니다. 그래서 나는 아래와 같이 조각 클래스 내에서 그것을 수행합니다 :조각 내에서 SearchView를 확장하는 방법
public class myfragment extends ListFragment{
...
class CustomSearchView extends SearchView{
public CustomSearchView(Context context) {
super(context);
}
public CustomSearchView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
Toast.makeText(getActivity(), "onkeydown", Toast.LENGTH_SHORT).show();
return super.onKeyDown(keyCode, event);
}
}
...
}
이제 조각에서이 확장 된 SearchView를 사용하고자합니다. 그러나 나는 그것을하는 방법을 모르겠다. searchItem.getActionView()를 사용하여 SearchView 객체를 작성 했으므로 오버라이드 된 onKeyDown 메소드가 내 조각에서 트리거되도록 CustomSearchView 객체로 캐스팅 할 수있는 방법이 있습니까?
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
...
// Retrieves the system search manager service
final SearchManager searchManager =
(SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
// Retrieves the SearchView from the search menu item
final SearchView searchView = (SearchView) searchItem.getActionView();
// Assign searchable info to SearchView
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getActivity().getComponentName()));
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String queryText) {
// Nothing needs to happen when the user submits the search string
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
...
}
});
이 질문 때문에 당신은 사용자 정의 SearchView
으로 캐스팅 할 수 How can I get onBackPressed() while SearchView is activated?
메뉴 인플레이터가 클래스를 찾을 수 없습니다 예외가 발생하면 지원 라이브러리를 사용하는 경우 또한, 당신은
http://schemas.android.com/apk/res-auto
네임 스페이스를 선언해야 클래스 "com.example.xxx.PhoneContactListFragment.CustomSearchView"에 대한 런타임에. 나는 여기서 내가 무엇을 잘못하고 있는지 확신하지 못한다. "yourapp : showAsAction"이 아니라 "android : showAsAction"을 사용합니다. "android : actionViewClass"와 동일합니다. 왜냐하면 내가 "yourapp : .."를 사용하면 편집기에 "com.example.xxx '패키지의'showAsAction '속성에 대한 리소스 식별자가 없습니다"라는 메시지가 나타납니다. – faizal지원 라이브러리를 사용하는 중일 수도 있습니다. 하지마. 'android' 네임 스페이스를 사용하십시오. 오류에 관해서는, 당신의 클래스 공개입니다. 프래그먼트 클래스 밖에 놓을 수 있을까요? – Szymon
맞습니다! 지원 라이브러리를 사용하지 않기 때문에'android' 네임 스페이스를 사용합니다. 'CustomSearchView' 클래스를 자신의 java 파일에두면 오류가 해결되었습니다. 그러나'onKeyDown'은'SearchView' 나 소프트 키보드의 어떤 문자를 만질 때 전혀 트리거되지 않습니다. 조각 클래스의 검색보기에서 정의 된'onQueryTextLListener'는 예상대로 트리거됩니다. 그러나 onKeyDown이 전혀 호출되지 않는 이유를 이해할 수 없습니다. – faizal