2016-07-04 2 views
2

체크 박스를 사용하여 목록보기를 만들려고하고 있는데 코드를 시도했지만 제대로 작동했지만 확인란 상태를 처리 할 때 문제가 발생했습니다. 문제는이 코드 줄에 나타납니다setOnCheckedChangeListener를 사용하는 체크 박스 홀더

holder.chkBox.setOnCheckedChangeListener((MyActivity) context);

내가 시도 코드가 MainActivity.java 파일에서 분리 Adapter.java 파일을 사용하지만, 내 코드에있는 모든 그래서 난 돈 하나 개의 파일에 있기 때문에 ' t 내 코드에서이 줄을 사용하는 방법을 알고, 내가 홀더의 줄을 사용하여이

holder.chkBox.setOnCheckedChangeListener((this) context);

뿐만 아니라 잘못된 문

이유를 시도 내가 CHEC 때이다 확인란을 선택하고 다른 항목을 스크롤하면 선택한 확인란이 자동으로 선택 취소됩니다.이 문제를 해결하는 방법을 알려주시겠습니까? 당신이 컨텍스트를 전달하는 데 필요한 있도록

가 여기 내 어댑터 코드 그것은 당신이 함께 일 예제 코드처럼 보이는

@Override public View getView(final int position, View convertView, ViewGroup parent) { 
     ViewHolder holder=null; 
     View itemView = convertView; 
     if (itemView == null){ 
      LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      itemView = inflater.inflate(R.layout.item, null); 
      holder = new ViewHolder(); 
      holder.textView1 = (TextView) itemView.findViewById(R.id.textView1); 
      holder.check1 = (CheckBox) itemView.findViewById(R.id.check1); 
      holder.check2 = (CheckBox) itemView.findViewById(R.id.check2); 
      itemView.setTag(holder); 
     } 
     else{ 
      holder = (ViewHolder) itemView.getTag(); 
     } 
     holder.check1.setTag(position); 
     final Item item = items.get(position); 
     holder.textView1.setText(item.getName()); 
     holder.check1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

                @Override 
                public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
                 if(buttonView.isPressed()){ 

                 if (position != ListView.INVALID_POSITION) { 
                  Item p = items.get(position); 
                  p.setSelected(isChecked); 
                 } 

                 } 
                } 
               } 
     ); 
holder.check2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

                @Override 
                public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
                 if(buttonView.isPressed()){ 
                       if (position != ListView.INVALID_POSITION) { 
                   Item p = items.get(position); 
                   p.setSelected(isChecked); 
                  } 

                 } 
                } 
               } 
     ); 
     holder.check1.setChecked(item.isSelected()); 
     holder.check2.setChecked(item.isSelected()); 
     return itemView; 
    } 
}private static class ViewHolder { 
    public TextView textView1; 
    public CheckBox check2,check1; 
}} 

답변

0

먼저, 활동이 다음과 같은 방법을 구현하기 위해 강제로 OnCheckedChangedListener 인터페이스를 구현합니다

 @Override 
     public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 

     } 

지금 형 OnCheckedChangeListener의 인수로 어댑터로 활동의 참조를 전달하고 그것을 청취자의 이름을 :

:

MyAdapter myadapter = new MyAdapter(context, MyActivity.this,listdata); 

그런 다음 어댑터 클래스에서, 같은 당신의 체크 박스에 대한 리스너를 설정 0

여기에 요점은입니다. isPressed() 확인란의 방법입니다.

+0

의 어댑터 코드를 업데이트 한 다음 어댑터 및 활동 코드 –

+0

을 게시했습니다. 시도했지만 작동하지 않습니다. 'if (buttonView. isPressed()) { int pos = lv.getPositionForView (buttonView); if (pos! = ListView.INVALID_POSITION) { 항목 p = items.get (pos); p.setSelected (isChecked); } } –

+0

주석에 코드를 붙여 넣지 마십시오. 귀하의 질문에 어댑터 구현을 추가하십시오 –

0

입니다, 당신의 활동은, OnCheckedChangeListener을 구현했습니다. 다음과 같이 어댑터에서 당신은 그것을 할 수 있습니다 :

holder.chkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) { 
      // logic 
     } 
    } 
); 

당신이 당신이 아마 당신의 활동 재정의 onCheckedChanged 방법을 가지고, 작업 한 코드에서. 위의 로직을 움직여 라.

+0

시도해 보았지만 작동하지 않습니다. 'if (buttonView.isPressed()) { int pos = lv.getPositionForView (buttonView); if (pos! = ListView.INVALID_POSITION) { 항목 p = items.get (pos); p.setSelected (isChecked); } } –

+0

문제가 무엇인지 디버그해야합니다. "효과가 없다"는 것은 우리가 무엇이 잘못되었는지를 말하는 것만으로는 충분하지 않습니다. 우리는 볼 수없는 코드를 움직이고 있습니다. 이것은 초기 문제보다 더 중요한 것입니다. 오류가 표시되는 경우 Android Studio에서 빨간색 선과 잘못된 설명을 남겨 두어야합니다. –

+0

문제는 응용 프로그램이 작동하지 않는 것입니다. 확인란 중 하나를 선택하려고 할 때 어댑터 구현을 내 질문에 추가했습니다. –