Ответы пользователя по тегу Android
  • CardView & RecyclerView & Fragment, как в адаптере реализовать фрагмент?

    @kamiLLxiii
    Android-разработчик
    Слегка запутанно написано, но вроде понял. Вам надо по клику на элемент списка заменить текущий фрагмент?
    Тогда вам стоит создать еще один интерфейс и использовать композицию. Реализацию этого интерфейса передавить в конструкторы RVAdapter и ContentViewHolder, а его самого создать на том уровне, где происходит должно происходить управление фрагментами. Например, так:

    public class RVAdapter extends RecyclerView.Adapter<RVAdapter.ContentViewHolder> {
    
        public interface OnItemClickListener{
           void onItemClicked(int position);
        }
    
        public static class ContentViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
            CardView cv;
            TextView cvTitle;
            TextView cvContent;
            ImageView cvPhoto;
            OnItemClickListener cvClickListener;
    
            public ContentViewHolder(View itemView, OnItemClickListener clickListener) {
                super(itemView);
                cv = (CardView) itemView.findViewById(R.id.cv);
                cvTitle = (TextView) itemView.findViewById(R.id.text_title);
                cvContent = (TextView) itemView.findViewById(R.id.text_content);
                cvPhoto = (ImageView) itemView.findViewById(R.id.text_photo);
                cvClickListener = clickListener;
    
                itemView.setOnClickListener(this);
            }
    
            @Override
            public void onClick(View v) {
                cvClickListener.onItemClicked(getAdapterPosition());
                Log.i("RecyclerView", "Вы щёлкнули на позиции " + getAdapterPosition());
            }
        }
    
        List<CardContent> mCardContents;
       
        public RVAdapter(List<CardContent> mCardContents, OnItemClickListener itemClickListener) {
            this.mCardContents = mCardContents;
            this.mItemClickListener = itemClickListener;
        }
       
        @Override
        public int getItemCount() {
            return mCardContents.size();
        }
    
        @Override
        public ContentViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardview, viewGroup, false);
            ContentViewHolder pvh = new ContentViewHolder(v, mItemClickListener);
    
            return pvh;
        }
        @Override
        public void onBindViewHolder(ContentViewHolder contentViewHolder, int i) {
            contentViewHolder.cvTitle.setText(mCardContents.get(i).title);
            contentViewHolder.cvContent.setText(mCardContents.get(i).content);
            contentViewHolder.cvPhoto.setImageResource(mCardContents.get(i).photoId);
            //Log.i("RecyclerView", "Позиция " + i);
    
        }
        @Override
        public void onAttachedToRecyclerView(RecyclerView recyclerView) {
            super.onAttachedToRecyclerView(recyclerView);
        }
    }
    Ответ написан
    Комментировать
  • Может кто знает название приложения?

    @kamiLLxiii
    Android-разработчик
    Не знаю подобных приложений, а гуглить за вас лень. Проще узнать в каких магазинах продаются нужные вам вещи и искать эти магазины, например, в Яндекс.Картах.
    Ответ написан
    Комментировать
  • Запутался в контекстах (Fragment, AlertDialog, callback interface)?

    @kamiLLxiii
    Android-разработчик
    Ты не в контекстах запутался, ты не понимаешь, какие параметры передаешь в конструкторы. Советую внимательнее поизучать Java.
    Замени
    Dialog_SpinnerSelect dialog = new Dialog_SpinnerSelect(getActivity());
    на
    Dialog_SpinnerSelect dialog = new Dialog_SpinnerSelect(this);
    ;
    private Context context;
    
    public Dialog_SpinnerSelect(Context context) {
            this.context = context;
            builder = new AlertDialog.Builder(context);
    }
    на
    private Fragment_Layers fragment;
    
    public Dialog_SpinnerSelect(Fragment_Layers fragment) {
            this.fragment = fragment;
            builder = new AlertDialog.Builder(fragment.getActivity());
    }
    ;
    public void onClick(DialogInterface dialog, int arg1) {
                    ((ResultListener) context).onSpinnerSelectResult(keys[selecteditemid]);
                }
    на
    public void onClick(DialogInterface dialog, int arg1) {
                    ((ResultListener) fragment).onSpinnerSelectResult(keys[selecteditemid]);
                }
    Ответ написан
  • Протоколы для работы с андроид. Существуют ли?

    @kamiLLxiii
    Android-разработчик
    Видимо, вас интересует есть ли такой функционал, когда с Android-устройства заходишь браузером на некоторый сайт, там устанавливаешь параметры будильника, кликаешь на кнопарь и будильник устанавливается на телефоне.
    В целом, аналогичная функциональность существует (т.е. можно по ссылке из браузера открыть приложение на устройстве с определенными параметрами), но в данном случае, если вы хотите использовать встроенные будильники, надо смотреть на то, как они обрабатывают Intent'ы. Весьма вероятно, что разные производители используют собственные будильники, и добиться такого поведения на всех устройствах не выйдет.

    Полезные ссылки:
    developer.android.com/guide/components/intents-com...
    developer.android.com/guide/components/intents-fil...
    Ответ написан
  • Каким образом обновялется приложение через Play Market?

    @kamiLLxiii
    Android-разработчик
    Переустанавливается, да (но только исполняемый код и ресурсы). Все данные, которые были сохранены приложением (базы данных, SharedPreferences) остаются и это правильно (юзеры бы сильно негодовали, если фото-приложение при каждом обновлении уничтожало все их фоточки).
    Ответ написан
    2 комментария
  • Как сделать Анимацию картинки в Android?

    @kamiLLxiii
    Android-разработчик
    Насчет готовых не знаю, когда сам такое делал (костыльно, вестимо) делал две анимации поворота на 90 градусов. Запускал первую, когда она заканчивалась, выставлял новую картинку в ImageView и запускал вторую анимацию.
    Ответ написан
    1 комментарий
  • Приложение Android без MainActivity - как реализовать?

    @kamiLLxiii
    Android-разработчик
    Вот похожий вопрос stackoverflow.com/questions/10909683/launch-androi...
    Если кратко, то:
    1. В манифесте постевить тему для актитвити Theme.Translucent.NoTitleBar.
    2. В активити не вызывать setContentView().
    Ответ написан
    Комментировать
  • Как использовать библиотеки android studio и libgdx одновременно?

    @kamiLLxiii
    Android-разработчик
    Советую посмотреть на эту статью, в ней показано, встроить рекламное View AdMob в приложение, и сделать по аналогии.
    Ответ написан
    Комментировать
  • [Android] Как можно узнать, приложение куплено или скачано?

    @kamiLLxiii
    Android-разработчик
    Если приложение куплено, то на аккаунте человека, который его купил, условно есть галка - "приложение куплено". В приложении c помощью Android LVL можно спросить "а есть ли такая галка у текущего аккаунта на устройстве". Если нет - по приложение, скорее всего, скачано со стороннего сайта.
    Ответ написан
    Комментировать
  • Почему на TextView с одинаковыми id в разных layout отображается одинаковый текст?

    @kamiLLxiii
    Android-разработчик
    При уходе и возвращении на другую Activity у фрагмента должен вызваться on(Save/Restore)InstanseState(). Скорее всего у тебя эти методы не переопределены, поэтому система сама сохраняет состояние твоих TextView, а потом сама и восстанавливает. Так как id у них одинаковы, (а сохранение происходит по id) каждый следующий текст перетирает предыдущий и при восстановлении от прописывается во все TextView
    Ответ написан
    Комментировать
  • Как открыть определенном браузере URL?

    @kamiLLxiii
    Android-разработчик
    Вот примерный код, как можно указать, какое приложение надо запустить по Intent'у
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.yandex.ru"));
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    
    //запрос всех activity, которые могут этот intent обработать
    List<ResolveInfo> resInfo = activity.getPackageManager().queryIntentActivities(intent, 0);
    if (!resInfo.isEmpty()) {
    	for (ResolveInfo info : resInfo) {
    			if (/*здесь проверяй info на предмет нужной тебе activtiy*/) {
    				intent.setClassName(info.activityInfo.packageName, info.activityInfo.name);
    				intent.setPackage(info.activityInfo.packageName);
    				context.startActivity(intent);
    				break;
    			}
    		}
    	}
    }
    Ответ написан
    Комментировать
  • С чего начинать изучать Java?

    @kamiLLxiii
    Android-разработчик
    А если туго с английским, то с этого.
    Ответ написан
    Комментировать
  • Проблемы с памятью в Android?

    @kamiLLxiii
    Android-разработчик
    Я сталкивался с похожим поведением. Вроде как зависит от размеров приложения. С последних версий Android не позволяет занять малое оставшееся место в системной памяти - чтобы у системы всегда было место для работы. Сколько это "мало" - он сам решает. Пока я не почистил основательно память, некоторые приложения не устанавливались.
    Так было у меня. Возможно, у вас будет по другому. Если есть возможность - перенесите часть приложений на SD-карту, т.к. по умочланию приложения устанавливаются в системную память, и попробуйте снова.
    Ответ написан
  • Как из ListView вызывать соответствующие элементу списка описание в AlertDialog?

    @kamiLLxiii
    Android-разработчик
    Примерно это будет выглядеть так:
    ListView (который заменит TextView) отображает данные из переданной ему коллекции или списка элементов. Следовательно, вам надо будет создать класс для элементов, наподобие:
    class CocktailItem{
    		String title;
    		String description;
    		Bitmap icon;
    }

    Создаете коллекцию коктейлей с использование этого класса, создаете Adapter с этой коллекцией, передаете его (адаптер) в ListView, делаете ему (ListView) setOnItemClickListener, и в этот OnItemClickListener при нажатии будет приходить номер элемента в списке коктейлей. Этот элемент можно там же и получить, примерно так:
    AdapterView.OnItemClickListener() {
    		@Override
    		public
    		void onItemClick(final AdapterView<?> parent, final View view, final int position, final long id) {
    			CocktailItem item = (CocktailItem) parent.getAdapter().getItem(position);
    			AlertDialog.Builder builder = new AlertDialog.Builder(ShotDrinks.this);
    
    			builder.setTitle(item.title)
    					.setMessage(item.description)
    					.setCancelable(true)
    					.setIcon(R.drawable.ic_launcher)
    					...
    		}
    	};


    В общем, если вы размебетесь, как работает ListView и Adapter, все вопросы отпадут сами собой.
    Ответ написан
    1 комментарий
  • Что происходит в отмеченном коде? И что запрашивает ContentResolver query?

    @kamiLLxiii
    Android-разработчик
    query - это select для таблицы.

    (3) все верно
    (4) верно, получаем id определенной записи в таблице. По факту, всего одной.
    (5) составляем Uri, по которому через ContentResolver сможем получить конкретную запись. Не к столбцу, а к записи, которую нашли на предыдущем шаге.
    (1) Запрашивается Cursor содержащий не столбец с "_id", а select из таблицы для тех записей у которых "_id" равен переданному.
    (2) Cursor всего с одной записью, у которой есть все столбцы, из которого мы выгребаем определенное значение

    Уот так уот
    Ответ написан
    1 комментарий
  • Android разработка. Так Java ли?

    @kamiLLxiii
    Android-разработчик
    Перевел свой андроид проект на Kotlin. Поначалу было непривычно и не очень понятно как писать код, но в целом он предоставляет больше возможностей, чем Java. Другое дело, что он еще в процессе разработки и может сильно меняться, а релиз в этом году маловероятен. Если не страшно пускать в продакшен, то пожалуйста - на мой Kotlin стоит того, чтоб на нем писать.
    Ответ написан
    2 комментария
  • Как реализовать наследование?

    @kamiLLxiii
    Android-разработчик
    О, снова 4pda =)
    Проблема в том, что android.support.v4.app.Fragment#getActivity() возвращает класс FragmentActivty. А тебе нужен ActionBarActivty. Если ты уверен, что активити у фрагмента является ActionBarActivty, то можешь просто сделать каст
    ((ActionBarActivity)getActivity()).getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
    Ответ написан
    2 комментария
  • Странное поведение NavUtils.navigateUpFromSameTask?

    @kamiLLxiii
    Android-разработчик
    Возможно, это зависит от версии ОС. Попробуй добавить такой же параметр в тег activity
    <activity
    				android:name=".SubActivity"
    				android:label="@string/title_activity_sub"
    				android:parentActivityName=".MainActivity">
    
    			<!-- Parent activity meta-data to support 4.0 and lower -->
    			<meta-data
    					android:name="android.support.PARENT_ACTIVITY"
    					android:value=".MainActivity"/>
    		</activity>

    Взято отсюда.
    Ответ написан
  • Неправильное отображение в webView при портретной ориентации втф?

    @kamiLLxiii
    Android-разработчик
    Советую покопаться в настройках (WebView.Settings) WebView, в частности обратить внимание на метод WebSettings#setLoadWithOverviewMode.
    Ответ написан
    Комментировать
  • Почему появляется смещение иконок в меню?

    @kamiLLxiii
    Android-разработчик
    Нет под рукой девайса чтоб проверить, но похоже дело в стилях, примененных к выпадающему списку, поскольку код выглядит корректным.
    <item name="android:popupMenuStyle">@style/popup_menu_bl</item>

    <style name="popup_menu_style_bl" parent="@android:style/Widget.Holo.ListPopupWindow">
            <item name="android:popupBackground">@drawable/popup_menu_bl</item>
    </style>

    Попробуй удалить стили совсем и посмотри что произойдет.

    UPD:
    Проверил на телефоне версию из репозитория - никаких сдвигов нет. Возможно виноват производитель прошивки - использует некорректно написанные, опять же, стили. Уже сталкивался с этим на некоторых телефонах.
    Вот снимки с Lenovo S820, Android 4.4.2.
    spoiler
    742248507e434f359e8776d096198cc6.pngc8b23dc01cc843ec9fb3e56aaafebb92.png

    Проверь еще на нескольких девайсах.
    Ответ написан
    4 комментария