Последний элемент в представлении прокрутки, требующий двойного щелчка для запуска - PullRequest
3 голосов
/ 19 марта 2012

Я знаю, что это похоже на другие проблемы, но, поскольку я нахожу это довольно странным поведением, я надеюсь, что кто-нибудь объяснит ПОЧЕМУ это происходит.

В основном это известная проблема кликабельности, которую нужно дважды щелкнуть, прежде чем вызвать код onClick.
Загадочный момент заключается в том, что это происходит только внутри ONE многих экземпляров одного и того же вложенного макета.
Посмотрим ...

У меня есть следующий основной макет:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

<ImageView
    android:id="@+id/imgBanner"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight=".80"
    android:src="@drawable/banner" />

<ScrollView
    android:id="@+id/scroll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight=".20" >

    <LinearLayout
        android:id="@+id/panContent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/txtMainTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="xxx" />

        <TextView
            android:id="@+id/txtMainSubtitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="xxx" />

    </LinearLayout>

</ScrollView>

</LinearLayout>

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent" >

<TextView
    android:id="@+id/txtTitle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true" />

<TextView
    android:id="@+id/txtSynopsis"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/btnAction"
    android:layout_below="@+id/txtTitle"
    android:layout_toRightOf="@+id/imgCover" />

<ImageView
    android:id="@+id/imgCover"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/txtTitle" />

<Button
    android:id="@+id/btnAction"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/imgCover"
    android:layout_alignRight="@+id/imgCover"
    android:layout_below="@+id/imgCover"
    android:text="Download" />

<ImageView
    android:id="@+id/imgFade"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/txtSynopsis"
    android:layout_alignLeft="@+id/txtSynopsis"
    android:layout_alignRight="@+id/txtSynopsis"
    android:scaleType="fitXY"
    android:src="@drawable/fade_down" />

<ImageView
    android:id="@+id/imgMore"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/imgFade"
    android:layout_alignLeft="@+id/imgFade"
    android:layout_alignRight="@+id/imgFade"
    android:onClick="showMore"
    android:src="@drawable/show_more" />

<ImageView
    android:id="@+id/imgLess"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/imgFade"
    android:layout_alignRight="@+id/imgFade"
    android:layout_below="@+id/txtSynopsis"
    android:layout_marginTop="-12dip"
    android:onClick="showLess"
    android:src="@drawable/show_less"
    android:visibility="gone" />

</RelativeLayout>

Что будет:

  • заголовок сверху
  • слева: обложка книги + кнопка загрузки (под ней)
  • справа: синопсис, вырезанный в нижней части кнопки загрузки, с изображением, заставляющим его исчезать на заднем плане (imgFade), и кнопкой «показать больше» (плюс кнопка «показать меньше», которая остается скрытым)

В методе onCreate я добавляю некоторый контент в элемент panContent следующим образом:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    LinearLayout panContent = (LinearLayout) findViewById(R.id.panContent);
    for (EntryModel m : this.entries) {
        ViewGroup g = new LinearLayout(this);
        getLayoutInflater().inflate(R.layout.entry, g);
        /* ... populating data in the TextView and ImageView ... */
        panContent.addView(g);
    }
}

Наконец, вот обработчики onClick:

public void showMore(View v) {
    RelativeLayout container = (RelativeLayout) v.getParent();

    View txt = container.findViewById(R.id.txtSynopsis);
    RelativeLayout.LayoutParams sLayout =
        (RelativeLayout.LayoutParams) txt.getLayoutParams();
    sLayout.addRule(RelativeLayout.ALIGN_BOTTOM, 0);

    container.findViewById(R.id.imgFade).setVisibility(View.GONE);
    container.findViewById(R.id.imgLess).setVisibility(View.VISIBLE);
    v.setVisibility(View.GONE);

    txt.setLayoutParams(sLayout);
}

public void showLess(View v) {
    RelativeLayout container = (RelativeLayout) v.getParent();

    View txt = container.findViewById(R.id.txtSynopsis);
    RelativeLayout.LayoutParams sLayout =
        (RelativeLayout.LayoutParams) txt.getLayoutParams();
    sLayout.addRule(RelativeLayout.ALIGN_BOTTOM, R.id.btnAction);

    container.findViewById(R.id.imgFade).setVisibility(View.VISIBLE);
    container.findViewById(R.id.imgMore).setVisibility(View.VISIBLE);
    v.setVisibility(View.GONE);

    txt.setLayoutParams(sLayout);
}

В основном:

  • когда я нажимаю изображение «показать больше», отсоединяем нижнюю часть txtSynopsis '(чтобы оно охватывало столько строк, сколько нужно), скрываем изображение (и маску затухания) и показываем изображение «меньше»;
  • при нажатии "показать меньше", ну, восстановить вещи.

Вот и мы. Это работает безупречно (почти ...) для КАЖДОЙ ОДНОЙ ЗАПИСИ, но ПОСЛЕДНЕЙ !!!
Что происходит с этим:

  • Я должен нажать ДВАЖДЫ на «показать больше», чтобы все заработало,
  • Я должен дважды щелкнуть на «показать меньше»,
  • тогда достаточно нажать ОДИН РАЗ на «показать больше», но
  • Мне все еще нужно нажать ДВАЖДЫ на "показать меньше"!

Спасибо всем, любая помощь и полезное понимание высоко ценится.

1 Ответ

0 голосов
/ 31 марта 2014

Убедитесь, что ваш взгляд не фокусируется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...