Я знаю, что это похоже на другие проблемы, но поскольку я нахожу это довольно своеобразным поведением, я надеюсь, что кто-нибудь объяснит ПОЧЕМУ это происходит.Последний элемент в просмотре прокрутки, требующий двойного щелчка для запуска
В основном это известная проблема с кликабельностью, которую нужно дважды щелкнуть, прежде чем запускать код 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
«снизу (так, чтобы он охватывал количество строк, которые он хочет), скрыть изображение (и затухающую маску) и показать изображение« показать меньше »; - при нажатии "показать меньше", хорошо, восстановить вещи.
Здесь мы идем. Это работает безупречно (почти ...) для КАЖДОГО ОДНОГО ВХОДА, но ПОСЛЕДНИЕ !!!
Что происходит с этим одним является:
- я должен нажать дважды на «Показать еще», чтобы он работает,
- я должен нажать дважды на «показать меньше»,
- , то это достаточно нажать только один раз на «показать больше», но
- Мне все еще нужно нажать ДВАЖДЫ на «показать меньше»!
Спасибо всем, любая помощь и полезная проницательность получили высокую оценку.