Странное поведение с getChildFragmentManager в Android 4.3 и ниже

У меня проблема с методом getChildFragmentManager.

Я использовал его для создания нескольких вложенных фрагментов в viewpager. Этот Viewpager находится в PopupWindow. Таким образом создаются фрагменты, и я вижу их в пользовательском интерфейсе. Фрагменты содержат gridview.

К сожалению, с Android 4.3 (API 18) или меньше я не могу выбрать элемент gridview. В то же время с андроидом 4.4 (API 19) я могу это сделать!

Чтобы перехватить щелчок элемента, я использовал обратные вызовы для Activity, и метод Activity onAttach правильный.

Я думаю, что проблемы вызваны getChildFragmentManager, но я не уверен.

Если у кого-то была эта проблема, может ли он объяснить мне свое решение? Спасибо!


person hooloovoo    schedule 12.05.2014    source источник
comment
Вы пытаетесь разместить EditText в GridView? Какие виды элементов управления находятся в GridView?   -  person BenjaminPaul    schedule 12.05.2014
comment
Gridview содержит imageView! Я хочу щелкнуть изображение, чтобы начать какое-то действие, но этот щелчок не перехватывается!   -  person hooloovoo    schedule 12.05.2014


Ответы (2)


Я решил свою проблему.

С Android 4.4 у меня не было проблем, поэтому я ничего не менял в своем коде. Таким образом я добавляю прослушиватель в gridview.

gridView.setOnItemClickListener(this);

... // class extends Listener

 @Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    if(DEBUG) Log.d("EmojiconGridFragment","entered");
    if (mOnEmojiconClickedListener != null) {
        if(DEBUG) Log.d("EmojiconGridFragment","itemClicked");
        mOnEmojiconClickedListener.onEmojiconClicked((Emojicon) parent.getItemAtPosition(position));
    }
}

В Android 4.3 и более ранних версиях я должен добавить код для обработки элемента щелчка, потому что щелчок не перехватывается обычным слушателем. Итак, я получаю это для каждого элемента, как показано ниже:

//in the adapter class for grid view insert this code
if(!Utils.hasKitKat()) {
        holder.icon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.d("Emoicons", " clicked");
                view.setSelected(true);
                mOnEmojiconClickedListener.onEmojiconClicked(emoji);
            }
        });
    }

где Utils.HasKitkat() — это метод проверки, работает ли он в android kitkat или нет.

public static boolean hasKitKat() {
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
}

Я надеюсь, что это решение будет полезно для кого-то.

person hooloovoo    schedule 19.05.2014
comment
Я была такая же проблема. Спасибо. Вы спасли мою жизнь. - person stanete; 19.06.2014
comment
Я рад помочь кому-то! :D - person hooloovoo; 28.06.2014

Недавно я столкнулся с очень похожей проблемой, однако мой сценарий немного отличался тем, что я пытался встроить EditBox в Android ListView (GridView не имеет значения).

Проблема в том, что GridViewItem пытается получить фокус вместо ImageView, что вызывает неожиданные проблемы с получением фокуса элементом управления.

Подумайте об этом так... вместо выбора ImageView (как вы можете захотеть) GridViewItem вместо этого получает фокус, и именно это вызывает вашу проблему.

Я решил это, удалив список и реализовав вертикально ориентированный LinearView, содержащийся внутри ScrollViewer, я полагаю, что вам, возможно, придется подумать о том, чтобы сделать то же самое...

Альтернативой этому является размещение кода, который обычно обрабатывается щелчком ImageView, внутри ItemClickListener в представлении сетки, а не в каждом ImageView.

gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
        }
};

Это, вероятно, будет более простым решением для вас.

person BenjaminPaul    schedule 12.05.2014
comment
Спасибо за ответ! Я использовал второй способ перехвата щелчка элемента: прослушиватель для просмотра сетки, а не для каждого просмотра изображения! Но, у меня есть эта проблема! - person hooloovoo; 12.05.2014
comment
Если у вас все еще есть эта проблема, вам нужно опубликовать код, чтобы мы могли лучше понять, что происходит. - person BenjaminPaul; 12.05.2014
comment
Я Решил проблему. или лучше, я обошел проблему. Я использовал для Android 4.3 прослушиватель одиночных кликов для каждого элемента, а для Android 4.4 я использовал прослушиватель кликов для просмотра сетки! - person hooloovoo; 12.05.2014
comment
да, я сделаю это. Я сейчас так занят! Я сделаю это в ближайшее время! - person hooloovoo; 15.05.2014
comment
Конечно, напечатать этот комментарий потребовалось бы больше времени, чем принять ответ, который кто-то нашел в своем собственном напряженном рабочем дне, чтобы помочь вам? - person BenjaminPaul; 15.05.2014
comment
Я понимаю ваш ответ, но у меня были проблемы (работа и семья), поэтому я добавляю свое решение, когда могу это сделать. - person hooloovoo; 19.05.2014