Комментарии 140
Отличный проект, не так давно пробовал — понравилось.
Правда в самом ABS порой бывают такие косяки, что не хочется с ним лишний раз связываться
Правда в самом ABS порой бывают такие косяки, что не хочется с ним лишний раз связываться
Круто, спасибо за работу! А FragmentActivity будет работать?
Количество старых все меньше и меньше…
Проект плюсую однозначно.
Планируете и дальше продолжать?
Проект плюсую однозначно.
Планируете и дальше продолжать?
Ух ты! Некоторое время назад натыкался случайно на этот проект, а он, оказывается, местный-хабровский :)
Огромное спасибо за эту работу! Скорее всего, буду использовать в будущих приложениях.
Огромное спасибо за эту работу! Скорее всего, буду использовать в будущих приложениях.
Ага, я тоже, когда коммитил Toast в Holo стиле на 20 строчек, не думал, что стану чуть-ли не главным разрабом этого проекта :D
А с чего вы взяли, что он местный? Автор — Christophe Versieux.
Можно оставить это здесь?
github.com/ChristopheVersieux/HoloEverywhere/graphs/contributors
github.com/ChristopheVersieux/HoloEverywhere/graphs/contributors
Ну для кого местный а для кого нет, наверное как то.
Один здоровый минус данного проекта состоит в том что нужно наследовать от левой активности что бы использовать данную тему.
А как быть тем кто использует например RoboGuice?
public class MainActivity extends com.WazaBe.HoloEverywhere.sherlock.SListActivity { ...
А как быть тем кто использует например RoboGuice?
Используйте че хотите. Просто реализуйте интерфейс Base для обычных активити и SBase для ABS. Ну, support методы (типо getSupportSharedPreferences) — по желанию.
Предполагаю, что также как с Sherlock Actionbar — тянуть ещё одну зависиомость: RoboguiceSherlock. Не заботятся разработчики о дизайне своих библиотек. Кстати, как выход — Roboguice можно использовать напрямую (без наследования от активитей ихних).
Либо взять сырцы (он же открытый?) RoboGuice и перелинковать его на нужные активити из HEE
Отличная штука, сам использовал, но учитывайте что размер apk вырастет примерно на 1.5Мб
Подключил к проекту. Очень неплохо! Разве что у меня приложение с каплей функционала уже весит 30 метров :) Может это из-за дебаг версии? :)
а все ресурсы (изображения итд) грузятся сразу все при загрузке приложения или по мере надобности?
Спасибо Вам за замечательный проект. Пытаюсь подключить его к существующему приложению и возникла проблема: не отображается контекстное меню для элемента внутри ListView. Без HoloEverywhere отображается. Что поменял: фрагмент теперь наследует SFragment ну и родительский Activity наследует SActivity. Быть может я что-то упустил?
Немного кода ListAdapter'а:
Немного кода ListAdapter'а:
@Override
public View getView(final Photo photo, View convertView,
ViewGroup parent)
{
if (convertView == null)
{
convertView = mInflater.inflate(
R.layout.list_item_newest_photos, parent, false);
}
...
final ImageView shareButton = (ImageView) convertView
.findViewById(R.id.share_button);
registerForContextMenu(shareButton);
shareButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
activePhoto = photo;
getSupportActivity().openContextMenu(shareButton);
}
});
return convertView;
}
Путем отладки выяснил, что onClick метод вызывается корректно, но вот метод onCreateContextMenu внутри фрагмента не вызывается.
Так как-бы это… ContextMenu вообще нигде не перезаписывается/изменяется… А просто с ActionBarSherlock оно открывается?
Открывалось. Устанавливая Holoeverywhere обновил и ABS. Может это вылезло с обновлением. Сейчас проверю
Проверил. Ревертнул изменения и если Activity наследует SherlockFragmentActivity а Фрагмент наследует SherlockFragment то все работает
Я уже и разные варианты пробовал вызова меню отсюда stackoverflow.com/questions/3722380/android-open-contextmenu-on-short-click-pass-item-clicked-details, но не один не работает если использовать SActivity и SFragment.
Только заметил, ваш SFragment не наследует SherlockFragment, может в этом причина?
Я вам больше расскажу. (S)(List)Activity, (S)(List)Fragment и все остальные — никто не наследуется от шерлоковских фрагментов/активити.
Да, я уже заметил. Только вот причина проблемы не ясна.
Может стоит открыть issue на github'е?
А толку? Думаете, кто-то вам поможет, кроме 16-и летнего пацана? :D
Изучаемс феномен, подождите:)
Изучаемс феномен, подождите:)
Стоооп, вы registerForContextMenu вызываете в Activity?
Нет, в фрагменте
а точнее даже в ListAdapter'е по событию getView
Ну тогда у меня для вас плохие новости:
MainFragment:

public void showAlertDialog(View v) {
MainFragment.getInstance().registerForContextMenu(v);
openContextMenu(v);
}
MainFragment:
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.add("Label 1");
menu.add("Label 2");
}
Спасибо за пример. Но, вероятно, когда объект находится внутри ListView это не хочет работать. Попробую еще покопать, может тестовый пример сделаю
Кстати, а это вполне возможно… Там немного кривоватая реализация ListView, пойду покопаю…
Попробуйте переименовать <ListView> в разметке на <android.widget.ListView>
Попробуйте переименовать <ListView> в разметке на <android.widget.ListView>
Кстати, я сейчас как-раз работаю над стилизацией ContextMenu, можете просто пару дней подождать.
Спасибо большое, буду ждать. Ну и если выкрою время попытаюсь накатать вам тестовый проект
Вроде запилил, смотреть dev ветку :)
Спасибо, буду пробовать
вариант с getActivity().openContextMenu не работает. Пробую другие
К сожалению, другие варианты тоже не работают. onCreateContextMenu вообще не вызывается.
Я уж по всякому пробовал, чтоб для верности:
Я уж по всякому пробовал, чтоб для верности:
registerForContextMenu(v);
list.showContextMenuForChild(v);
getSupportActivity().openContextMenu(v);
unregisterForContextMenu(v);
openContextMenu где-то в дебрях выкидывает method not implemented exception. Сейчас постараюсь дать больше инфы, т.к. в LogCat он не светится
Я набросал тестовый проект, который показывает, что onCreateContextMenu не вызывается. Если в примере поменять SActivity на SherlockFragmentActivity и SFragment на SherlockFragment то все работает и в логе пишет
Пофиксите только зависимосты, пожалуйста
dl.dropbox.com/u/37011471/Openphoto/ContextTestProject.zip
10-19 08:58:04.124: I/System.out(833): OnClick
10-19 08:58:04.124: I/System.out(833): Create context menu here
10-19 08:58:04.124: I/System.out(833): Create context menu here 2
Пофиксите только зависимосты, пожалуйста
dl.dropbox.com/u/37011471/Openphoto/ContextTestProject.zip
import android.view.ContextMenu;
Это ничего, что onCreateContextMenu с android.view.ContextMenu — final?
А использовать надо с тем, который лежит в com.actionbarsherlock.
Вообще — да, косячная реализация ListView, плюс вы использовали BaseContext, что делать ооочень не рекомендуется. Если сменить на android.widget.ListView, все работает:

Ну как все… Опять-же бага: onCreateContextMenu вызывается у активити, а не фрагмента, пойду колупать…
Это ничего, что onCreateContextMenu с android.view.ContextMenu — final?
А использовать надо с тем, который лежит в com.actionbarsherlock.
Вообще — да, косячная реализация ListView, плюс вы использовали BaseContext, что делать ооочень не рекомендуется. Если сменить на android.widget.ListView, все работает:
Ну как все… Опять-же бага: onCreateContextMenu вызывается у активити, а не фрагмента, пойду колупать…
Ну как косячная… в одном месте вместо false стоит true…
Это ничего, что onCreateContextMenu с android.view.ContextMenu — final?
А использовать надо с тем, который лежит в com.actionbarsherlock.
Как же так, почему же компилятор не матерится и дает переопределить?
Вообще в приложении я не использую BaseContext, там кнопка берется из View созданного LayoutInflater'ом.
Не знаю, скорей-всего вы херово склонировали репу или аналогично перелючились на dev ветку.
А по поводу некорректного вызова onCreateContextMenu — то-же нашел причину, сейчас запушаю оба фикса.
А по поводу некорректного вызова onCreateContextMenu — то-же нашел причину, сейчас запушаю оба фикса.
Готово.
Возникла проблемка с SDialogFragment и SActivity.
Диалог создаю так:
private void showDialog() {
if (null == dialogFragment) {
dialogFragment = new AuthDialogFragment();
}
final FragmentManager fm = getSupportFragmentManager();
final FragmentTransaction ft = fm.beginTransaction();
if (dialogFragment.isVisible()) {
dialogFragment.replace(ft);
} else {
dialogFragment.show(ft);
}
}
Что странно, метод public void show(FragmentManager manager, String tag) помечен как деприкейтед… :(
Так вот диалог отображается. Но при попытке повернуть экран приложение падает с такой ошибкой:
ERROR/AndroidRuntime(23786): FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{mega.app/mega.app.AuthenticatorActivity}: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment mega.app.AuthenticatorActivity$AuthDialogFragment: make sure class name exists, is public, and has an empty constructor that is public
Не могу разобраться, в чем дело… видимо он пытается восстановить диалог фрагмен автоматически где-то в/или после onCreate… Но почему не удается — не ясно…
Пысы На хабре не пашут теги code и source… Забавно…
Диалог создаю так:
private void showDialog() {
if (null == dialogFragment) {
dialogFragment = new AuthDialogFragment();
}
final FragmentManager fm = getSupportFragmentManager();
final FragmentTransaction ft = fm.beginTransaction();
if (dialogFragment.isVisible()) {
dialogFragment.replace(ft);
} else {
dialogFragment.show(ft);
}
}
Что странно, метод public void show(FragmentManager manager, String tag) помечен как деприкейтед… :(
Так вот диалог отображается. Но при попытке повернуть экран приложение падает с такой ошибкой:
ERROR/AndroidRuntime(23786): FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{mega.app/mega.app.AuthenticatorActivity}: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment mega.app.AuthenticatorActivity$AuthDialogFragment: make sure class name exists, is public, and has an empty constructor that is public
Не могу разобраться, в чем дело… видимо он пытается восстановить диалог фрагмен автоматически где-то в/или после onCreate… Но почему не удается — не ясно…
Пысы На хабре не пашут теги code и source… Забавно…
А вы проверили публичный ли класс, имеет ли пустой конструктор?
еще объявите его static
Класс публичный, внутренный, не статический, с публичным пустым конструктором, да.
статичным сделайте
А нужен статический. И вот эта конструкция:
излишняя, просто replace сработает корректно.
if (dialogFragment.isVisible()) {
dialogFragment.replace(ft);
} else {
dialogFragment.show(ft);
}
излишняя, просто replace сработает корректно.
DialogFragment.show(FragmentManager manager, String tag) является deprecated. Какой же тогда правильный способ показа диалога?
Если использую этот метод, то вылетает исключение
Если же просто show() использую, то вылетает такое исключение
10-19 10:58:35.726: E/AndroidRuntime(1117): java.lang.NullPointerException
10-19 10:58:35.726: E/AndroidRuntime(1117): at com.actionbarsherlock.internal.view.menu.ContextMenuDecorView.<init>(ContextMenuDecorView.java:54)
10-19 10:58:35.726: E/AndroidRuntime(1117): at com.WazaBe.HoloEverywhere.app.Fragment.prepareDecorView(Fragment.java:121)
10-19 10:58:35.726: E/AndroidRuntime(1117): at com.WazaBe.HoloEverywhere.app.Fragment.onCreateView(Fragment.java:89)
10-19 10:58:35.726: E/AndroidRuntime(1117): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:871)
10-19 10:58:35.726: E/AndroidRuntime(1117): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1083)
10-19 10:58:35.726: E/AndroidRuntime(1117): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:635)
10-19 10:58:35.726: E/AndroidRuntime(1117): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1431)
10-19 10:58:35.726: E/AndroidRuntime(1117): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420)
10-19 10:58:35.726: E/AndroidRuntime(1117): at android.os.Handler.handleCallback(Handler.java:587)
10-19 10:58:35.726: E/AndroidRuntime(1117): at android.os.Handler.dispatchMessage(Handler.java:92)
10-19 10:58:35.726: E/AndroidRuntime(1117): at android.os.Looper.loop(Looper.java:123)
10-19 10:58:35.726: E/AndroidRuntime(1117): at android.app.ActivityThread.main(ActivityThread.java:4363)
10-19 10:58:35.726: E/AndroidRuntime(1117): at java.lang.reflect.Method.invokeNative(Native Method)
10-19 10:58:35.726: E/AndroidRuntime(1117): at java.lang.reflect.Method.invoke(Method.java:521)
10-19 10:58:35.726: E/AndroidRuntime(1117): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
10-19 10:58:35.726: E/AndroidRuntime(1117): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
10-19 10:58:35.726: E/AndroidRuntime(1117): at dalvik.system.NativeStart.main(Native Method)
Если же просто show() использую, то вылетает такое исключение
10-19 11:02:16.095: E/AndroidRuntime(1132): java.lang.NullPointerException
10-19 11:02:16.095: E/AndroidRuntime(1132): at com.WazaBe.HoloEverywhere.app.DialogFragment.show(DialogFragment.java:303)
replace(FragmentManager)
К сожалению не работает
10-19 11:53:27.903: E/AndroidRuntime(1166): java.lang.NullPointerException
10-19 11:53:27.903: E/AndroidRuntime(1166): at com.actionbarsherlock.internal.view.menu.ContextMenuDecorView.<init>(ContextMenuDecorView.java:54)
10-19 11:53:27.903: E/AndroidRuntime(1166): at com.WazaBe.HoloEverywhere.app.Fragment.prepareDecorView(Fragment.java:121)
10-19 11:53:27.903: E/AndroidRuntime(1166): at com.WazaBe.HoloEverywhere.app.Fragment.onCreateView(Fragment.java:89)
Обновитесь:)
Шустро вы коммиты строчите :)
dev ведь:)
Спасибо, диалоги заработали, но Facebook SDK окна убивают приложение
10-19 12:07:23.723: E/AndroidRuntime(1216): java.lang.ClassCastException: com.WazaBe.HoloEverywhere.widget.ProgressBar
10-19 12:07:23.723: E/AndroidRuntime(1216): at android.app.ProgressDialog.onCreate(ProgressDialog.java:146)
10-19 12:07:23.723: E/AndroidRuntime(1216): at android.app.Dialog.dispatchOnCreate(Dialog.java:308)
10-19 12:07:23.723: E/AndroidRuntime(1216): at android.app.Dialog.show(Dialog.java:225)
10-19 12:07:23.723: E/AndroidRuntime(1216): at com.facebook.android.FbDialog$FbWebViewClient.onPageStarted(FbDialog.java:181)
10-19 12:07:23.723: E/AndroidRuntime(1216): at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:234)
10-19 12:07:23.723: E/AndroidRuntime(1216): at android.os.Handler.dispatchMessage(Handler.java:99)
10-19 12:07:23.723: E/AndroidRuntime(1216): at android.os.Looper.loop(Looper.java:123)
10-19 12:07:23.723: E/AndroidRuntime(1216): at android.app.ActivityThread.main(ActivityThread.java:4363)
10-19 12:07:23.723: E/AndroidRuntime(1216): at java.lang.reflect.Method.invokeNative(Native Method)
10-19 12:07:23.723: E/AndroidRuntime(1216): at java.lang.reflect.Method.invoke(Method.java:521)
На эмуляторе версии 2.1 при использовании HoloEverywhere получаю такие сообщения:
Т.е. где-то в holoeverywhere стилях используются атрибуты более поздних версий SDK
10-22 06:44:42.368: E/ResourceType(52): Style contains key with bad entry: 0x010102f0
10-22 06:44:42.368: E/ResourceType(52): Style contains key with bad entry: 0x010102fd
10-22 06:44:42.368: E/ResourceType(52): Style contains key with bad entry: 0x01010308
10-22 06:44:42.368: E/ResourceType(52): Style contains key with bad entry: 0x0101030a
10-22 06:44:42.368: E/ResourceType(52): Style contains key with bad entry: 0x0101032c
Т.е. где-то в holoeverywhere стилях используются атрибуты более поздних версий SDK
Что нужно сделать, чтобы стиль HoloEverywhere применился к SDialogFragment'у?
Не подскажите с проблемой. В проекте используется класс ApectRatioImageView взятый отсюда stackoverflow.com/a/4688335/527759
Так вот при использовании с HoloEverywhere, в логе теперь постоянно выскакивают ошибки
View создается через Inflater
Так вот при использовании с HoloEverywhere, в логе теперь постоянно выскакивают ошибки
Скрытый текст
10-25 08:52:12.031: W/System.err(501): java.lang.ClassNotFoundException: android.view.me.openphoto.android.app.ui.widget.AspectRatioImageView in loader dalvik.system.PathClassLoader@44e8d030
10-25 08:52:12.041: W/System.err(501): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
10-25 08:52:12.051: W/System.err(501): at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
10-25 08:52:12.051: W/System.err(501): at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
10-25 08:52:12.051: W/System.err(501): at android.view.LayoutInflater.createView(LayoutInflater.java:466)
10-25 08:52:12.051: W/System.err(501): at com.WazaBe.HoloEverywhere.LayoutInflater.onCreateView(LayoutInflater.java:219)
10-25 08:52:12.061: W/System.err(501): at com.WazaBe.HoloEverywhere.LayoutInflater.onCreateView(LayoutInflater.java:226)
10-25 08:52:12.061: W/System.err(501): at com.WazaBe.HoloEverywhere.LayoutInflater$HoloFactoryMerger.onCreateView(LayoutInflater.java:33)
10-25 08:52:12.061: W/System.err(501): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:558)
10-25 08:52:12.061: W/System.err(501): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
10-25 08:52:12.061: W/System.err(501): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
10-25 08:52:12.061: W/System.err(501): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
10-25 08:52:12.061: W/System.err(501): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
10-25 08:52:12.071: W/System.err(501): at me.openphoto.android.app.HomeFragment$NewestPhotosAdapter.getView(HomeFragment.java:369)
10-25 08:52:12.071: W/System.err(501): at me.openphoto.android.app.HomeFragment$NewestPhotosAdapter.getView(HomeFragment.java:1)
10-25 08:52:12.071: W/System.err(501): at me.openphoto.android.app.ui.adapter.EndlessAdapter.getView(EndlessAdapter.java:67)
10-25 08:52:12.071: W/System.err(501): at android.widget.AbsListView.obtainView(AbsListView.java:1274)
10-25 08:52:12.071: W/System.err(501): at android.widget.ListView.measureHeightOfChildren(ListView.java:1147)
10-25 08:52:12.071: W/System.err(501): at android.widget.ListView.onMeasure(ListView.java:1060)
10-25 08:52:12.071: W/System.err(501): at android.view.View.measure(View.java:7964)
10-25 08:52:12.071: W/System.err(501): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
10-25 08:52:12.081: W/System.err(501): at com.WazaBe.HoloEverywhere.widget.LinearLayout.measureChildWithMargins(LinearLayout.java:231)
10-25 08:52:12.081: W/System.err(501): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:888)
10-25 08:52:12.081: W/System.err(501): at android.widget.LinearLayout.measureVertical(LinearLayout.java:350)
10-25 08:52:12.081: W/System.err(501): at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
10-25 08:52:12.081: W/System.err(501): at android.view.View.measure(View.java:7964)
10-25 08:52:12.081: W/System.err(501): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
10-25 08:52:12.081: W/System.err(501): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
10-25 08:52:12.081: W/System.err(501): at android.view.View.measure(View.java:7964)
10-25 08:52:12.091: W/System.err(501): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
10-25 08:52:12.091: W/System.err(501): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
10-25 08:52:12.091: W/System.err(501): at android.view.View.measure(View.java:7964)
10-25 08:52:12.091: W/System.err(501): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
10-25 08:52:12.101: W/System.err(501): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
10-25 08:52:12.101: W/System.err(501): at android.view.View.measure(View.java:7964)
10-25 08:52:12.101: W/System.err(501): at android.widget.LinearLayout.measureVertical(LinearLayout.java:464)
10-25 08:52:12.101: W/System.err(501): at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
10-25 08:52:12.111: W/System.err(501): at android.view.View.measure(View.java:7964)
10-25 08:52:12.111: W/System.err(501): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
10-25 08:52:12.121: W/System.err(501): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
10-25 08:52:12.121: W/System.err(501): at android.view.View.measure(View.java:7964)
10-25 08:52:12.121: W/System.err(501): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3023)
10-25 08:52:12.121: W/System.err(501): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
10-25 08:52:12.121: W/System.err(501): at android.view.View.measure(View.java:7964)
10-25 08:52:12.133: W/System.err(501): at android.view.ViewRoot.performTraversals(ViewRoot.java:763)
10-25 08:52:12.133: W/System.err(501): at android.view.ViewRoot.handleMessage(ViewRoot.java:1633)
10-25 08:52:12.133: W/System.err(501): at android.os.Handler.dispatchMessage(Handler.java:99)
10-25 08:52:12.133: W/System.err(501): at android.os.Looper.loop(Looper.java:123)
10-25 08:52:12.133: W/System.err(501): at android.app.ActivityThread.main(ActivityThread.java:4363)
10-25 08:52:12.133: W/System.err(501): at java.lang.reflect.Method.invokeNative(Native Method)
10-25 08:52:12.141: W/System.err(501): at java.lang.reflect.Method.invoke(Method.java:521)
10-25 08:52:12.141: W/System.err(501): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
10-25 08:52:12.141: W/System.err(501): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
10-25 08:52:12.141: W/System.err(501): at dalvik.system.NativeStart.main(Native Method)
View создается через Inflater
convertView = mInflater.inflate(
R.layout.list_item_newest_photos, parent, false);
Должно быть исправлено в dev ветке, а вообще — я забыл про не системные виджеты.
Можно жестко указать пакет через LayoutInflater.remap(Hard)
Можно жестко указать пакет через LayoutInflater.remap(Hard)
Спасибо, попробую
без изменений. Помимо этого, получаю еще кучу сообщений касательно ABS библиотеки
10-25 09:48:03.061: W/System.err(606): java.lang.ClassNotFoundException: android.view.com.actionbarsherlock.internal.widget.CapitalizingButton in loader dalvik.system.PathClassLoader@44e8d030
10-25 09:48:03.061: W/System.err(606): java.lang.ClassNotFoundException: android.view.com.actionbarsherlock.internal.widget.CapitalizingButton in loader dalvik.system.PathClassLoader@44e8d030
Интересно, что это касается виджетов и самой библиотеки. Например, когда я вызываю контекстное меню, в логе светится такое
10-25 09:51:40.911: W/System.err(606): java.lang.ClassNotFoundException: android.view.com.WazaBe.HoloEverywhere.internal.DialogTitle in loader dalvik.system.PathClassLoader@44e8d030
10-25 09:51:40.931: W/System.err(606): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
10-25 09:51:40.931: W/System.err(606): at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
10-25 09:51:40.931: W/System.err(606): at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
10-25 09:51:40.931: W/System.err(606): at android.view.LayoutInflater.createView(LayoutInflater.java:466)
10-25 09:51:40.931: W/System.err(606): at com.WazaBe.HoloEverywhere.LayoutInflater.onCreateView(LayoutInflater.java:214)
10-25 09:51:40.931: W/System.err(606): at com.WazaBe.HoloEverywhere.LayoutInflater.onCreateView(LayoutInflater.java:221)
Заметил еще одну проблему. После включения Holoeverywhere в проект стал странно себя вести ABS. Дело в том, что в зависимости от того, какая вкладка выбрана я меняю видимость некоторых MenuItems. Так вот, после нескольких таких изменений видимости и включения Indeterminate Progress, кнопки могут съехать влево а то и вообще исчезнуть. Может подскажете куда копать?
github.com/photo/mobile-android/issues/128
github.com/photo/mobile-android/issues/128
Похоже, что AlertDialog.Builder игнорирует setTitle и показывает текст «Title» вместо переданного параметра.
В SFragment не отображается прогресбар если не указан стиль.
У вас прям фантастические баги.
Никто, кроме вас, их пока не подтверждает :)
Никто, кроме вас, их пока не подтверждает :)
Я их не придумываю. Попробуйте сами в своем демо убрать атрибут стиль у ProgressBar. По дефолту этот атрибут отсутствует у маленького индикатора. Это то я профиксил добавив стиль style="?android:attr/progressBarStyle". Но вот с AlertDialog то что делать? Я его добавляю через DialogFragment.
Тут код, если интересно github.com/photo/mobile-android/blob/master/app/src/me/openphoto/android/app/UploadActivity.java ищите SelectImageDialogFragment. OnCancelListener не вызывается никогда, я проверял отладчиком. Также setTitle просто игнорируется.
Ммм, да, багу ProgressBar признаю. А вот со всем остальным думаю одна проблема — неверный Context.
куда то хоть копать? Там как контекст берется getActivity() из DialogFragment
По диалогу: никуда не копать, у вас код немного не верный:
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
...
mDialog.setOnCancelListener(this);
mDialog.setOnDismissListener(this);
У вас и с нативным DialogFragment такая фича не прокатит. Переопределяйте методы прямо во фрагменте.Т.е. я должен создать диалог через builder.create(). А уже потом вызывать setTitle, setOnCancelListener?
Да нет.
Вот немного подправленный фрагмент из того файла, что вы дали выше:
А с setTitle — будем разбираться.
Вот немного подправленный фрагмент из того файла, что вы дали выше:
public static class SelectImageDialogFragment extends CommonDialogFragment
{
public static interface SelectedActionHandler extends Serializable
{
void cameraOptionSelected();
void galleryOptionSelected();
}
private SelectedActionHandler handler;
public static SelectImageDialogFragment newInstance(
SelectedActionHandler handler)
{
SelectImageDialogFragment frag = new SelectImageDialogFragment();
frag.handler = handler;
return frag;
}
@Override
public void onCancel(DialogInterface dialog) {
getActivity().finish();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final CharSequence[] items = {
getString(R.string.upload_camera_option),
getString(R.string.upload_gallery_option)
};
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.upload_title);
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (handler == null)
{
return;
}
switch (item) {
case 0:
handler.cameraOptionSelected();
return;
case 1:
handler.galleryOptionSelected();
return;
}
}
});
return builder.create();
}
}
}
А с setTitle — будем разбираться.
Не работает вставка фрагментов через xml layout
11-01 11:45:57.178: E/AndroidRuntime(18873): Caused by: java.lang.ClassNotFoundException: Could not find class: fragment
11-01 11:45:57.178: E/AndroidRuntime(18873): at com.WazaBe.HoloEverywhere.LayoutInflater.onCreateView(LayoutInflater.java:229)
11-01 11:45:57.178: E/AndroidRuntime(18873): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:653)
Ага, бага. На будущее: может таки перейдем на трекер гитхаба, он более предназначен для баг-репортов, нежели хабр ;)
Да, конечно. Я просто руководствовался вашим ответом на предложение.
Может стоит открыть issue на github'е?
А толку? Думаете, кто-то вам поможет, кроме 16-и летнего пацана? :D
Изучаемс феномен, подождите:)
Не подскажете как правильно пользоваться SharedPreferences в связке с PreferenceFragment? Я обнаружил, что PreferenceFragment создает json файл. Тогда как в приложении getSharedPreferences читает из xml файла с тем же именем.
в PreferenceFragment.onCreate я пытался переопределить имя и тип
getPreferenceManager().setSharedPreferencesName(«default»);
getPreferenceManager().setSharedPreferencesMode(Context.MODE_MULTI_PROCESS);
getPreferenceManager().setSharedPreferencesName(«default»);
getPreferenceManager().setSharedPreferencesMode(Context.MODE_MULTI_PROCESS);
Получать объект SharedPrefernces от PreferenceManager из пакета HoloEverywhere.
Сложновато тогда будет использовать одни и те же опции одновременно в сервисе и приложении, особенно если package name у них разный. Или ошибаюсь?
Тогда просто смените используемую имплементацию на дефолтовую xml.
Application.getConfig().setPreferenceImpl(PreferenceImpl.XML);
Ну или что-то типо того, точно не помню, а на код пыриться лень.
Application.getConfig().setPreferenceImpl(PreferenceImpl.XML);
Ну или что-то типо того, точно не помню, а на код пыриться лень.
Хм, а вы не думали, что надо заменить реализацию метода getSharedPreferences в com.WazaBe.HoloEverywhere.app.Application, чтобы использовались текущие настройки PreferenceImpl? А то получается используешь один контекст, создается xml, используешь другой, создается то ли json то ли xml в зависимости от настроек.
Хотя, вроде как, разобрался, что можно использовать статический метод PreferenceManager.wrap. Кастомные preferences это было так неочевидно для меня. Была куча багов, когда записывались опции в Activity а уже в сервисе прочитать их не мог.
А по теме — добавлю пару нотайсов о SharedPreferences в вики.
Нет, не так.
Создам вики, и добавлю пару нотайсов.
Да, я уже предвкушаю последствия рефакторинга в dev ветке, где вы попереименовывали половину классов :)
Половину? Все :D
Просто купили домен holoeverywhere.org, потихоньку туда переезжаем, мавен тоже.
Хотя почему «купили»?
Все на мои кровные, еще ни одного доната не было ведь :D
Просто купили домен holoeverywhere.org, потихоньку туда переезжаем, мавен тоже.
Хотя почему «купили»?
Все на мои кровные, еще ни одного доната не было ведь :D
По поводу SharedPreferences, может стоит по умолчанию оставить XML реализацию? Представьте миграцию на Holoeverywhere. Половина Activities уже переведена, а половина еще стандартны (так было у меня). В одних Activities используются старые опции xml, а в других уже json. Я то уже наступил на эти далеко неочевидные грабли, но, вероятно, кто-то еще может наступить. Ну или сделайте migration guide какой-нибудь
Я-же грю, если в static блоке Application объекта вызвать getConfig().setPreferenceImpl(PreferenceImpl.XML), то xml реализация будет использоваться везде. Вы, скорей-всего, не там его вызвали, поэтому реализации поделились между двумя :)
Только Application должен наследоваться от org.holoeverywhere.app.Application.
Только Application должен наследоваться от org.holoeverywhere.app.Application.
Упс, чутка прочитал ветку — да, getSharedPreferences в Application забыл.
-deleted-
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
HoloEverywhere