0

Android Archt를 팔로우하고 있습니다. component 프로젝트를 빌드하십시오. 내가 휴지통보기 항목에 레이아웃을 삭제 슬쩍을 구현하고어댑터에서 바인딩 이벤트가 실행되지 않음

public class CataloguesAdapter extends DataBoundListAdapter<CatalogueEntity, CatalogueItemBinding> { 

    private final android.databinding.DataBindingComponent dataBindingComponent; 
    private final ContributorClickCallback callback; 
    private CatalogueItemBinding mBinding; 

    public CataloguesAdapter(DataBindingComponent dataBindingComponent, 
          ContributorClickCallback callback) { 
     this.dataBindingComponent = dataBindingComponent; 
     this.callback = callback; 
    } 

    @Override 
    protected CatalogueItemBinding createBinding(ViewGroup parent) { 
     mBinding = DataBindingUtil 
       .inflate(LayoutInflater.from(parent.getContext()), 
         R.layout.catalogue_item, parent, false, 
         dataBindingComponent); 

     //while this click event is working fine 
     mBinding.getRoot().setOnClickListener(v -> { 
      CatalogueEntity catalogueEntity = mBinding.getCatalogue(); 
      if (catalogueEntity != null && callback != null) { 
       callback.onClick(catalogueEntity); 
      } 
     }); 

     //todo:not working, this event is not firing 
     mBinding.deleteIcon.setOnClickListener(v-> callback.onItemDelete()); 

     return mBinding; 
    } 
} 

: 가이드 라인에 따라 I는 다음과 같이 DataBoundListAdapter을 확장 CataloguesAdapter라는 이름의 사용자 정의 어댑터를 만들었습니다. 왼쪽으로 스 와이프 같은

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools"> 

    <data> 

     <variable 
      name="catalogue" 
      type="com.mindtree.igxbridge.traderapp.datasource.local.entity.CatalogueEntity" /> 

    </data> 

    <android.support.v7.widget.CardView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:cardUseCompatPadding="true"> 

     <FrameLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <RelativeLayout 
       android:id="@+id/view_background" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:background="@color/colorRed"> 

       <ImageView 
        android:id="@+id/delete_icon" 
        android:layout_width="@dimen/dimen_30_dp" 
        android:layout_height="@dimen/dimen_30_dp" 
        android:layout_alignParentEnd="true" 
        android:layout_centerVertical="true" 
        android:layout_marginEnd="@dimen/dimen_10_dp" 
        app:srcCompat="@drawable/ic_delete"/> 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_centerVertical="true" 
        android:layout_marginEnd="@dimen/dimen_10_dp" 
        android:layout_toStartOf="@id/delete_icon" 
        android:text="@string/text_delete" 
        android:textColor="@color/Material.87.white" 
        android:textSize="14sp" /> 

      </RelativeLayout> 

      <RelativeLayout 
       android:id="@+id/view_foreground" 
       android:layout_width="match_parent" 
       android:background="#FFFFFF" 
       android:layout_height="wrap_content"> 

       <android.support.v7.widget.AppCompatImageView 
        android:id="@+id/arrow_icon" 
        android:layout_width="@dimen/dimen_30_dp" 
        android:layout_height="@dimen/dimen_30_dp" 
        android:layout_alignParentEnd="true" 
        android:layout_centerVertical="true" 
        android:layout_marginEnd="@dimen/dimen_10_dp" 
        app:srcCompat="@drawable/ic_arrow_right" />    

      </RelativeLayout> 

     </FrameLayout> 

    </android.support.v7.widget.CardView> 
</layout> 

또 다른 작업이/바로 잘 작동하지만, 삭제 버튼 이벤트를 클릭한다 불리는 점점되지 않은 : 다음 목록 항목의 XML 레이아웃입니다.

findViewbyId를 확인하고 클릭 이벤트를 등록하려고했으나 그와 관련하여 아무런 문제가 없습니다. CatalogueItemBinding이 올바르게 등록되어 있지만 다른 오류 소스를 찾을 수 없습니다.

감사합니다.

답변

0

코드를 잘못 이해 한 경우 수정하십시오. FrameLayout을 사용하여 두 개의 상대 레이아웃을 서로 겹쳐서 (전경 및 배경) 호스팅했습니다. 삭제 버튼은 배경에 있고 전경은 너비 속성에 match_parent입니다. 따라서 삭제 단추가 포 그라운드로 덮여 "이벤트 발생 없음"으로 이어지는 것으로 생각됩니다. 전경에서 삭제 버튼을 통합

가능한 해결 방법

보십시오. UI 구성 요소를 앞에 배치하는 것이 좋습니다.

+0

삭제하기 위해 스 와이프를 구현했습니다. view_background를 스 와이프하는 동안 삭제 버튼이 나타납니다. 그래서 나는 삭제 버튼을 클릭 할 수 있어야합니다. – prdp89

0

나는 당신이 당신의 XML 클래스가 어댑터 클래스로 설정되어 있는지를 잊어 버렸다고 생각한다. XML로 변수를 생성하면 어댑터 클래스를 가져올 것이다.

<variable 
    name="myAdapter" 
    type="import your adapter class"> 
</variable> 

이제이 변수를 어댑터로 설정하십시오.

@Override 
    protected CatalogueItemBinding createBinding(ViewGroup parent) { 
     mBinding = DataBindingUtil 
       .inflate(LayoutInflater.from(parent.getContext()), 
         R.layout.catalogue_item, parent, false, 
         dataBindingComponent); 
     mBinding .setmyAdapter(this);  
     return mBinding; 
    } 
} 

클릭하면 작동합니다. 희망이 당신을 도울 것입니다.

+0

헤이 헤만, 세 가지 옵션을 모두 시도했습니다 : mBinding.setAdapter (this); mBinding.setVariable (R.layout.catalogue_item, this); mBinding.executePendingBindings(); 그것은, 다른 어떤 제안도 효과가 없었습니다. – prdp89

+0

설정 한 어댑터 후에는 삭제 기능을 호출하려는 클릭 리스너 이벤트를 호출해야합니다. –

+0

예 이렇게하면됩니다 : // todo : not working mBinding.deleteIcon.setOnClickListener (v-> callback.onItemDelete()); 콜백도 적절하게 구현됩니다. – prdp89