[英]Android Button OnClickListener only fired after clicking other button
我有一個具有此行布局的ListFragment
:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="false"
android:descendantFocusability="blocksDescendants"
android:focusable="true"
android:focusableInTouchMode="false" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp"
android:orientation="vertical"
android:layout_marginRight="20dp" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_marginLeft="20dp"
android:paddingTop="4dp"
android:layout_marginRight="20dp"
android:background="#2eb199" >
<TextView
android:id="@+id/titleField"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:text="Titel"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="#FFFFFF"
android:textSize="20sp"
android:layout_alignParentLeft="true"
android:textStyle="bold" />
<TextView
android:id="@+id/placeField"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:text="Plaats"
android:textColor="#FFFFFF"
android:textSize="20sp"
android:layout_alignParentRight="true"
android:textStyle="bold" />
</RelativeLayout>
<LinearLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="146dp"
android:orientation="vertical"
android:background="@drawable/card_bg" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="94dp"
android:orientation="vertical"
android:padding="8dp" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="4dp" >
<TextView
android:id="@+id/clientField"
android:text="Opdrachtgever"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true" />
<TextView
android:id="@+id/datetimeField"
android:text="Datum/Tijd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true" />
</RelativeLayout>
<TextView
android:id="@+id/descriptionField"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="14dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:background="#3e454d" >
<Button
android:id="@+id/detailsButton"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_weight=".5"
android:background="#3e454d"
android:text="Meer info"
android:textColor="#FFFFFF"
android:clickable="true"
android:focusable="false"
android:focusableInTouchMode="false"
android:textStyle="bold" />
<LinearLayout
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:background="#B3B5BD"
android:orientation="vertical" />
<Button
android:id="@+id/joinButton"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight=".5"
android:background="#3e454d"
android:text="Deelnemen"
android:textColor="#FFFFFF"
android:clickable="true"
android:focusable="false"
android:focusableInTouchMode="false"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
<ImageView
android:id="@+id/selector_arrow"
android:layout_marginTop="16dp"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/selector_arrow"
android:visibility="gone" />
</RelativeLayout>
在這里,我在ArrayAdapter中設置了偵聽器:
detailsButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (detailsButtonOnClickListener != null) {
detailsButtonOnClickListener.onDetailsButtonClick(position);
} else {
Log.v(TAG, "DetailsButton OnClickListener triggered but no listener is set.");
}
}
});
joinButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (joinButtonOnClickListener != null) {
joinButtonOnClickListener.onJoinButtonClick(currentInvitation.getId());
} else {
Log.v(TAG, "JoinButton OnClickListener triggered but no listener is set.");
}
}
});
但是第一行的detailsButton
OnClickListener
不會被觸發,除非我detailsButton
另一行中單擊另一個detailsButton
。 我確信偵聽器已設置並且正在100%工作,因為您始終可以單擊另一行中的detailsButton
。
我該如何解決這個問題?
我找到了解決方案。
在我的ListFragment中,當觸發DetailsButtonOnClickListener時,將調用showDetails(int position)方法。
@Override
public void onDetailsButtonClick(int position) {
if (position != currentDetailsPosition) {
showDetails(position);
}
}
但是變量currentDetailsPosition
沒有初始化,因為它是int
所以默認值為0
。 因為第一行的position = 0
所以從未調用方法showDetails(int position)
,因為currentDetailsPosition
也是0
。 但是,當您單擊另一個detailsButton
, currentDetailsPosition
不再為0
,因此現在調用了showDetails(int position)
方法。
通過將currentDetailsPosition
更改為Integer而不是int並將onDetailsButtonClick(int position)
方法更改為此:
@Override
public void onDetailsButtonClick(int position) {
if (currentDetailsPosition == null || position != currentDetailsPosition) {
showDetails(position);
}
}
終於奏效了。
首先,在按鈕的xml布局代碼中,使用方法名稱定義android:onClick屬性:
android:onClick="sample"
然后,在Java中定義一個與android:onClick
值同名的click方法。
public void sample (View view)
{
.....
.....
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.