2016-04-05 8 views
3

テキストビューとチェックボックスはRecyclerviewにあります。最初はすべてのチェックボックスが選択されています。私はチェックボックスの状態を変更しないようにしたいが、私はRecyclerviewスクロールを防止したくない。私はアダプタクラスではなく私のフラグメントクラスでこれをやりたいと思います。AndroidでRecyclerViewアイテムを無効にするにはどうすればよいですか?

ユーザーがチェックボックスの状態を変更しないようにするにはどうすればよいですか?

以下は、アダプタクラスのonBindViewHolderで書かれたサンプルコードです。

holder.cbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      //set your object's last status 
      tblFilm.setSelected(isChecked); 
     } 
    }); 

チェックボックスをユーザがクリックすることを可能にする第一のモードのために使用上のコード。

その後、私は チェックボックスをクリックしたくない2番目のモードを持っています。

私が行ったことは以下のとおりです。

optionsoff(recyclerView); 
private static void optionsOff(ViewGroup layout) { 
     layout.setEnabled(false); 
     layout.setClickable(false); 
     for (int i = 0; i < layout.getChildCount(); i++) { 
      View child = layout.getChildAt(i); 
      if (child instanceof ViewGroup) { 
       optionsOff((ViewGroup) child); 
      } else { 
       child.setEnabled(false); 
       child.setClickable(false); 
      } 
     } 

このoptionsoff()は機能しません。チェックボックスを無効にしていないためです。私はまだチェックボックスをクリックすることができます。私はRecyclerviewアイテムを無効にするこの2番目の方法について助けが必要です。

+1

これまで行ってきたことは?\ –

+0

現在、RecyclerViewはフィルム名である20の項目を表示し、すべてのチェックボックスがデフォルトで選択されています。ユーザーがチェックボックスをクリックしないようにしたい –

+0

あなたのレイアウトでアンドロイド:clickable = "false"としてください(チェックボックス) –

答えて

4

すべてCheckBoxには、方法setEnabledがあります。

onBindViewHolderでは、必要なcheckBoxへの参照を取得して無効にすることができます。このような

何か:

public void onBindViewHolder(ViewHolder holder, final int position) { 
    holder.checkBox.setEnabled(data.get(position).isEnabled()); 
} 

また、以下の答えは、XMLを通じて解決策を進めています。

+0

ありがとうございますが、これはアダプタークラスではなく私のフラグメントクラスで行いたいと思います。 –

+0

@ShameemPayyanurあなたはそれがどのように動作するのか理解していないようです。フラグメントは、ライフサイクルを持つ大きなビューのコンテナです。アダプターはあなたのデータとリスト表現の間の架け橋です。あなたは、xmlを通して、他の答えのように、または私の方法を使って、すべての項目の有効状態を変更することしかできません。 –

+0

pls更新された質問を確認してください –

1

メイビーのようなものを試してみませんか?あなたはクラスの

public View getView(int position, View convertView, ViewGroup parent) { 
     View view = null; 
     if (convertView == null) { 
      LayoutInflater inflator = context.getLayoutInflater(); 
      view = inflator.inflate(R.layout.rowbuttonlayout, null); 
      final ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check); 
     } else { 
      view = convertView; 
      ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position)); 
     } 
     ViewHolder holder = (ViewHolder) view.getTag(); 
     holder.checkbox.setChecked(true); 
     holder.checkbox.setEnabled(false); 
} 

良い例がBaseAdapter hereを拡張して追加することができます(BaseAdapterを拡張)アダプタでのプログラムで

<CheckBox 
     android:id="@+id/server_is_online" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:checked="true" 
     android:clickable="false" 
     android:text="@string/server_is_online" 
     android:textSize="23sp" /> 

+0

私はプログラム的にやりたいです。 –