2017-11-21 8 views
0

私はCardViewsのRecyclerViewリストを持っており、AppCompatActivityを使っています。各CardViewにはチェックボックスがあります。チェックボックスをクリックすると、コンテキストアクションバーが起動します。私はOnCheckedChangeListenerを使いたいと思います。 「chkSelected」チェックボックスがクリックされ、「chkSelectedが再度クリックされたとき、それが見えなくなったときにチェックマークが正しく見えるようになります。何が私はここで行方不明です?RecyclerView:チェックボックスを使ってコンテキストアクションバーCABを起動するには?

public class MyRecylerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 
    ...  
    private static ActionMode.Callback actionModeCallback = new ActionMode.Callback() { 
     @Override 
     public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
      return false; 
     } 
     @Override 
     public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 
      return false; 
     } 
     @Override 
     public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 
      return false; 
     } 
     @Override 
     public void onDestroyActionMode(ActionMode mode) { 
     } 
    }; 
    ... 
    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_contact_item, parent, false); 
     final ItemHolder itemHolder = new ItemHolder(view); 

     return itemHolder; 
    } 

    private static class ItemHolder extends RecyclerView.ViewHolder { 

     private CheckBox chkSelected; 

     private ItemHolder(View itemView) { 
      super(itemView); 

      chkSelected = (CheckBox) itemView.findViewById(R.id.chkSelected); 

      chkSelected.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
       @Override 
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
        if (isChecked) 
         mActionMode = ((AppCompatActivity) buttonView.getContext()).startSupportActionMode(actionModeCallback); 
       } 
      }); 
} 

は私もItemHolderにOnClickListener()を試してみました()運を持つ。コードは以下の通りです。onClickの中トースト()startSupportActionMode()と間違って何かがなければならないので、適切に表示される。

chkSelected.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Toast.makeText(view.getContext(),"Checkbox was clicked",Toast.LENGTH_LONG).show(); 
       if(mActionMode == null) { 
        // Start the Contextual Action Bar (CAB) using the ActionMode.Callback defined above 
        mActionMode = ((AppCompatActivity) view.getContext()).startSupportActionMode(mActionModeCallback); 
       } 
      } 
     });   

答えて

1

ソリューションonBindViewHolder()方法を設定することだったことだろうOnClickListenersのアイテムビューをItemholder()に更新してください。

関連する問題