2017-09-06 100 views
3

其實我想啓用/禁用RecyclerView的特定行,以便在Adapter類中實現我的邏輯onBindViewHolder函數,但是當我應用啓用屬性比它不對我的持有人物品造成任何影響。所以任何人都可以告訴我它是如何完成的。啓用/禁用和Clickable屬性不工作在RecyclerView適配器

注:

  1. 我知道有很多類似的問題在那裏,但我想大多數人,但沒有奏效。

  2. 可見性物業工作在我夾產品

代碼:

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    RegsiteredCarDisplayItem displayItem = displayItems.get(position); 

    holder.modelName.setText(displayItem.getMyOwnedCar().getCarModelName());  if(selected_usersList.contains(displayItems.get(position).getMyOwnedCar())) 
     holder.childView.setBackgroundColor(ContextCompat.getColor(context, R.color.buttonbackground)); 

    else 
     holder.childView.setBackgroundColor(ContextCompat.getColor(context, R.color.textViewBackground)); 

    if (displayItems.get(position).getVisible()){ 
     Log.d("AIAITRUE", String.valueOf(displayItems.get(position))); 
     holder.childView.setEnabled(true); 
     holder.childView.setClickable(true); 

    }else{ 
      // here i want to Disable my Holder View but the below line is not working, but i use another property like alpha instaed of Enabled property than property(refrence alpha) is working 
      holder.childView.setEnabled(false); 
     } 

} 

XML:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView 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" 
    android:id="@+id/cardView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:foreground="?android:attr/selectableItemBackground" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    card_view:cardElevation="0dp" 
    card_view:cardUseCompatPadding="true" 
    card_view:cardPreventCornerOverlap="false" 

    > 
<RelativeLayout 
    android:id="@+id/parentView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:clickable="false"> 
    <RelativeLayout 
     android:id="@+id/relativelayout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="@dimen/padding" 
     android:layout_marginBottom="@dimen/padding" 
     android:orientation="vertical" 
     android:clickable="false" 
     tools:ignore="UselessParent"> 


     <ImageView 
      android:id="@+id/icons" 
      android:layout_width="50dp" 
      android:layout_height="30dp" 


    android:layout_alignBottom="@id/linearlayout" 
      android:layout_alignParentLeft="true" 
      android:layout_centerVertical="true" 
      android:layout_centerHorizontal="false" 
      android:layout_marginEnd="@dimen/margin_five" 
      android:layout_marginRight="@dimen/margin_five" 
      android:layout_marginBottom="-15dp" 
      android:background="@color/colorAccent" 
      android:clickable="false" 
      android:adjustViewBounds="true" 
      tools:ignore="RtlHardcoded"/> 
     <LinearLayout 
      android:id="@+id/linearlayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@id/icons" 
      android:layout_marginBottom="@dimen/padding" 
      android:orientation="horizontal" 
      android:clickable="false" 
      tools:ignore="RtlHardcoded"> 
      <TextView 
       android:id="@+id/modelNumber" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:paddingLeft="@dimen/padding" 
       android:gravity="start" 
       android:clickable="false" 
       android:textSize="@dimen/text_size" 
       android:drawablePadding="@dimen/drawable_padding" 
       android:drawableTint="@color/buttonbackground" 
       tools:ignore="RtlSymmetry" 
       tools:targetApi="m" 
       android:textColor="@color/colorAccent"/> 
     </LinearLayout> 


     <TextView 
      android:id="@+id/registration_number" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/linearlayout" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:layout_marginLeft="@dimen/left_margin_registration_number" 
      android:layout_marginStart="@dimen/left_margin_registration_number" 
      android:clickable="false" 
      android:textColor="@color/text_color"/> 


     <ImageView 
      android:id="@+id/next_icon" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignBottom="@id/linearlayout" 
      android:layout_alignParentRight="true" 
      android:layout_centerVertical="true" 
      android:layout_centerHorizontal="false" 
      android:layout_marginBottom="-10dp" 
      android:clickable="false" 
      android:foregroundGravity="right" 
      android:tint="@color/buttonbackground" 
      app:srcCompat="@drawable/ic_next"/> 



    </RelativeLayout> 


</RelativeLayout> 


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

VieHolder類:

class ViewHolder extends RecyclerView.ViewHolder{ 
     TextView carName,modelName,registrationNumber; View cardView; 
    RelativeLayout childView;ImageView imageView; ImageView imageicon; 
    public ViewHolder(View itemView) { 
     super(itemView); 
     Typeface custom_font = Typeface.createFromAsset(context.getAssets(), "fonts/helvetica-neue-ce-55-roman.ttf"); 
     Typeface custom_fonts = Typeface.createFromAsset(context.getAssets(), "fonts/helvetica-neue-ce-35-thin.ttf"); 
     cardView = itemView.findViewById(R.id.cardView); 
     modelName=(TextView)itemView.findViewById(R.id.modelNumber); 
     registrationNumber=(TextView)itemView.findViewById(R.id.registration_number); 
     childView =(RelativeLayout)itemView.findViewById(R.id.parentView); 
     imageView=(ImageView) itemView.findViewById(R.id.next_icon); 
     imageicon=(ImageView)itemView.findViewById(R.id.icons); 
     modelName.setTypeface(custom_font); 
     registrationNumber.setTypeface(custom_fonts); 


    } 


} 
+0

嘗試父視圖(此卡視圖) –

+0

OKY讓我試試... – techDigi

+0

@BapusahebShinde還是同樣的問題 – techDigi

回答

2

嘗試一下本作的所有觀點:

holder.modelName.clearFocus(); 
      holder.modelName.setEnabled(false); 
      holder.modelName.setClickable(false); 
//registrationNumber 
holder.registrationNumber.clearFocus(); 
      registrationNumber.modelName.setEnabled(false); 
      registrationNumber.modelName.setClickable(false); 

也嘗試下面的代碼在到底要不要在啓動時:

if (displayItem.getVisible()){ 
      /* holder.ll_listitem.setEnabled(true); 
      holder.ll_listitem.setClickable(true);*/ 

     }else{ 
      Log.d("OnFalse",String.valueOf(displayItem.getVisible())); 
      holder.ll_listitem.clearFocus(); 
      holder.ll_listitem.setEnabled(false); 
      holder.ll_listitem.setClickable(false); 
     } 
+0

不工作.... – techDigi

2

檢查你實際上點擊你以爲你是點擊視圖。即使您禁用了您感興趣的視圖,您可能會覆蓋您試圖用其他視圖抑制點擊的視圖,即使您禁用了您感興趣的視圖,也會看到重疊視圖中的點擊。您可以檢查傳遞到點擊處理程序的視圖的ID來檢查。

如果是這種情況,那麼設置其他屬性,如背景顏色和alpha仍然可以工作。

0

您可能已經調用了setEnabled(false)的視圖實際上已被禁用,但您仍在點擊任何仍處於啓用狀態的子視圖。要禁用這些視圖,可以參考this問題。

0

您必須做一些小的更改 您可以在rowHolder的頂部放置一個灰色的額外佈局以禁用功能。

例如:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/cardView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:foreground="?android:attr/selectableItemBackground" 
    card_view:cardElevation="0dp" 
    card_view:cardPreventCornerOverlap="false" 
    card_view:cardUseCompatPadding="true"> 

    <RelativeLayout 
     android:id="@+id/parentView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:clickable="false"> 

     <RelativeLayout 
      android:id="@+id/relativelayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="5dp" 
      android:layout_marginTop="5dp" 
      android:clickable="false" 
      android:orientation="vertical" 
      tools:ignore="UselessParent"> 


      <ImageView 
       android:id="@+id/icons" 
       android:layout_width="50dp" 
       android:layout_height="30dp" 
       android:layout_alignBottom="@id/linearlayout" 
       android:layout_alignParentLeft="true" 
       android:layout_centerHorizontal="false" 
       android:layout_centerVertical="true" 
       android:layout_marginBottom="-15dp" 
       android:layout_marginEnd="5dp" 
       android:layout_marginRight="5dp" 
       android:adjustViewBounds="true" 
       android:background="@color/colorAccent" 
       android:clickable="false" 
       tools:ignore="RtlHardcoded" /> 

      <LinearLayout 
       android:id="@+id/linearlayout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginBottom="5dp" 
       android:layout_toRightOf="@id/icons" 
       android:clickable="false" 
       android:orientation="horizontal" 
       tools:ignore="RtlHardcoded"> 

       <TextView 
        android:id="@+id/modelNumber" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:clickable="false" 
        android:drawablePadding="5dp" 
        android:drawableTint="@color/colorAccent" 
        android:gravity="start" 
        android:paddingLeft="5dp" 
        android:textColor="@color/colorAccent" 
        android:textSize="15sp" 
        tools:ignore="RtlSymmetry" 
        tools:targetApi="m" /> 
      </LinearLayout> 


      <TextView 
       android:id="@+id/registration_number" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentLeft="true" 
       android:layout_alignParentStart="true" 
       android:layout_below="@+id/linearlayout" 
       android:layout_marginLeft="8dp" 
       android:layout_marginStart="8dp" 
       android:clickable="false" 
       android:textColor="@color/colorPrimary" /> 


      <ImageView 
       android:id="@+id/next_icon" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignBottom="@id/linearlayout" 
       android:layout_alignParentRight="true" 
       android:layout_centerHorizontal="false" 
       android:layout_centerVertical="true" 
       android:layout_marginBottom="-10dp" 
       android:clickable="false" 
       android:foregroundGravity="right" 
       android:tint="@color/colorAccent" 
       app:srcCompat="@drawable/ic_profle_icon" /> 


     </RelativeLayout> 

     <RelativeLayout 
      android:id="@+id/rLayoutDisable" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="#99000000" 
      android:visibility="visible"> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerInParent="true" 
       android:text="Disable" 
       android:textColor="@android:color/white" 
       android:textSize="18sp" 
       android:textStyle="bold" /> 

     </RelativeLayout> 

    </RelativeLayout> 


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

而現在設置rLayoutDisable可見或消失的知名度,如果你需要刪除的其他佈局click事件。

這樣的:

@Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     RegsiteredCarDisplayItem displayItem = displayItems.get(position); 

     holder.modelName.setText(displayItem.getMyOwnedCar().getCarModelName()); 
     if (selected_usersList.contains(displayItems.get(position).getMyOwnedCar())) 
      holder.childView.setBackgroundColor(ContextCompat.getColor(context, R.color.buttonbackground)); 

     else 
      holder.childView.setBackgroundColor(ContextCompat.getColor(context, R.color.textViewBackground)); 

     if (displayItems.get(position).getVisible()) { 
      Log.d("AIAITRUE", String.valueOf(displayItems.get(position))); 
      holder.rLayoutDisable.setVisibility(View.GONE); 
      holder.childView.setEnabled(true); 
      holder.relativelayout.setEnabled(true); 
      holder.childView.setClickable(true); 

     } else { 
      holder.rLayoutDisable.setVisibility(View.VISIBLE); 
      holder.relativelayout.setEnabled(false); 
     } 

    } 
0

如果要禁用特定行點擊事件,您可以添加

holder.childView.setClickable(false) 

相對於位置,並且還試圖通過把一個破調試指向它,這樣,如果你的控制器正在進行/執行該聲明,那麼你顯然知道了。

+0

是的,但是當我調試代碼這'holder.childView.setClickable(false)'代碼片段也被調用,但仍然可點擊在這一行上工作 – techDigi

1

使用此代碼:

 holder.childView.setEnabled(false); 
     holder.childView.setClickable(false); 
相關問題