2012-03-19 2 views
3

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

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

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

<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) и кнопкой «показать больше» (плюс кнопка « показать меньше ", что AINS скрыт)

В методе 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); 
} 

В основном :

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

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

  • я должен нажать дважды на «Показать еще», чтобы он работает,
  • я должен нажать дважды на «показать меньше»,
  • , то это достаточно нажать только один раз на «показать больше», но
  • Мне все еще нужно нажать ДВАЖДЫ на «показать меньше»!

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

ответ

0

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

Смежные вопросы