2013-10-21 81 views
1

解雇后我有一个ListFragment与该行布局:的Android按键OnClickListener只有点击另一个按钮

<?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."); 
       } 
      } 
     }); 

但第一行的detailsButtonOnClickListener不会被触发,除非我先点击另一行中的另一个detailsButton。 我确定收听者已设置并正在工作,因为您始终可以单击另一行中的detailsButton

我该如何解决这个问题?

+5

你为什么这样做? 'if(detailsButtonOnClickListener!= null){ detailsButtonOnClickListener.onDetailsButtonClick(position);' –

+0

因为我想传递当前行的位置,而不是当前视图。所以我可以从当前行的数据中打开一个新的DetailsActivity –

+0

在您创建适配器的xml中使用android:descendantFocusability =“blocksDescendants” –

回答

0

首先,在按钮的XML布局代码,定义安卓的onClick与方法的名称属性:

android:onClick="sample" 

然后,在Java中定义一个click方法具有相同的名称为值。

public void sample (View view) 
{ 
    ..... 
    ..... 
} 
1

我找到了解决方案。

在我的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一个整数,而不是一个int和改变onDetailsButtonClick(int position)方法是:

@Override 
public void onDetailsButtonClick(int position) { 
    if (currentDetailsPosition == null || position != currentDetailsPosition) { 
     showDetails(position); 
    } 
} 

它终于奏效。

相关问题