Почему firstId
не равен secondId
? firstId
является неправильным, secondId
является правильным.Получить идентификатор ресурса по названию возвращает «wrong» id
Как я могу «направить» getIdentifier
на поиск нужного search_button
?
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
int firstId = getResources().getIdentifier("android:id/search_button", null, null);
int secondId = recursiveLoopChildren(searchView, "search_button").getId();
return true;
}
public View recursiveLoopChildren(ViewGroup p_parent, String p_resourceName) {
View view = null;
for (int i = p_parent.getChildCount() - 1; i >= 0; i--) {
final View child = p_parent.getChildAt(i);
if (child instanceof ViewGroup) {
View returnedChild = recursiveLoopChildren((ViewGroup) child, p_resourceName);
if(returnedChild != null) {
view = returnedChild;
break;
}
} else {
String entryName = getResources().getResourceEntryName(child.getId());
if (child != null && entryName.equals(p_resourceName)) {
view = child;
break;
}
}
}
return view;
}
Это похоже на то, для чего вы должны использовать отладчик. – laalto
Ваше основное мышление ошибочно, что может привести вас в неправильном направлении. 'Как я могу заставить« getIdentifier »искать правильную функцию search_button' getIndentifier(). Вы можете быть уверены в этом, потому что миллионы приложений используют его миллионы раз в день без проблем. Если это не сработает, это будет серьезной ошибкой и будет исправлено быстро, поскольку это существенно остановит большинство приложений, работающих вообще. Поэтому ваше мышление должно быть «что я сделал неправильно». Если вы посмотрите на исходный код для getIdentifier(), вы также увидите, насколько это просто и немыслимо, что он потерпит неудачу. – Simon
Я бы начал с нормализации этого цикла. 'for (int i = 0; i
Simon