2017-11-27 2 views
0

나는 recyclerview 용 어댑터를 가지고 있습니다. 어디에 내가 데이터 같은 ArrayList 어떤 데이터가있는 내 활동에서 배열 목록을 전달합니다.recyclerView에서 확인란을 구현하는 방법은 무엇입니까?

AlternativeAdapter alternativeAdapter= new AlternativeAdapter(AlternativeActivity.this, data); 

    recyclerView.setAdapter(alternativeAdapter); 

대체 어댑터 클래스에는 텍스트보기와 확인란이 있습니다. 체크 박스가있는 모든 텍스트 항목을 표시 할 수 있습니다. AlternativeAdapter 클래스

public class AlternativeCurrencyAdapter extends RecyclerView.Adapter<AlternativeCurrencyAdapter.ViewHolder>{ 

ArrayList<String> currencyListArray; 
    Context context; 
    View view1; 
    ViewHolder viewHolder1; 
    TextView textView; 
    private int selectedPosition = -1;// no selection by default 
    public AlternativeCurrencyAdapter(Context context1, ArrayList<String> currencyListArray){ 

     this.currencyListArray = currencyListArray; 
     context = context1; 
    }  
    public class ViewHolder extends RecyclerView.ViewHolder{ 

     public TextView username; 
     public CheckBox chkSelected; 
     public ViewHolder(View v){ 
      super(v); 
      username = (TextView)v.findViewById(R.id.username); 
      chkSelected = (CheckBox) v.findViewById(R.id.chkSelected); 
      itemView.setOnClickListener(new View.OnClickListener(){ 
       @Override 
       public void onClick(View v) { 
        // get position 
        int pos = getAdapterPosition(); 

        // check if item still exists 
        if(pos != RecyclerView.NO_POSITION){ 
         String clickedDataItem = currencyListArray.get(pos); 
         Toast.makeText(v.getContext(), "You clicked " + clickedDataItem, Toast.LENGTH_SHORT).show(); 

        } 
       } 
      }); 

     } 
    } 

    @Override 
    public AlternativeCurrencyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){ 

     view1 = LayoutInflater.from(context).inflate(R.layout.alternative_currency_adapter_list,parent,false); 

     viewHolder1 = new ViewHolder(view1); 

     return viewHolder1; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, final int position){ 

     holder.username.setText(currencyListArray.get(position)); 
    } 
    @Override 
    public int getItemCount(){ 
     return currencyListArray.size(); 
    } 
} 
배열 목록의 항목이 표시됩니다 이런 식으로

하지만 내 필요에

오른쪽 모서리에 표시해야합니다 왼쪽 모서리와 각 항목의 체크 박스에 표시해야합니다 항목에 있습니다. 체크 박스 토스트 메시지를 클릭하면 XYZ 항목을 선택한 것과 같은 메시지가 나타납니다. 또한 다중 선택이 아닌 단일 선택 만 필요합니다. 내가

holder.chkSelected.setChecked(currencyListArray.get(position).isSelected()); 

를 사용할 때

나는 쇼 타임 오류를 컴파일합니다. 해결할 수 없습니다 isSelected()

나를 안내하십시오.

+0

입니다 isSelected는 Arraylist 메소드이지만 isSelected()는 arraylist 메소드가 아닙니다. currencyListArray.get (position)은 ArrayList의 값 반환 값입니다. 반환하지 않음 확인란은 선택되어 있지 않습니다. –

+0

RecyclerView에서 단일 선택에 대한이 링크를 확인하십시오. https://stackoverflow.com/questions/39127008/how-can-i-select-only-one-checkbox-in-recyclerview-and-notifydataset-changed –

답변

1

첫 번째 것은이고, currencyListArray는 문자열의 arraylist이므로 "isSelected()"로 반환하지 않습니다.

이제 귀하의 요구 사항을 충족하면 확인란을 선택하면 메시지를 표시해야합니다.

그래서 같은 코드 :

@Override 
public void onBindViewHolder(ViewHolder holder, final int position){ 

    holder.username.setText(currencyListArray.get(position)); 
    holder.chkSelected.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
      //do your toast programming here. 
     } 
    }); 
} 

지금은 한 번에 하나의 항목을 선택, 두 번째 요구 사항에 와서 : 여기에 해당하는 코드 ::

chkSelected.setChecked(position== selectedPosition); 

     chkSelected.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if(isChecked) 
       { 
        selectedPosition = position; 
       } 
       else{ 
        selectedPosition = -1; 
       } 
       notifyDataSetChanged(); 
      } 
     }); 
+0

잘 작동합니다. 고맙습니다 ankit. –

+0

안녕하세요 @gyanSAwasthi 제발 너무 내 대답을 upvote하십시오 –

관련 문제