2012-11-30 1 views
0

사용자가 listView 안에있는 체크 박스를 클릭하면 텍스트에 strikethough를 설정하고 싶습니다 .ListView 안에 세 개의 항목이 있다고 가정하지만 첫 번째 항목에서 체크 상자를 클릭하면 텍스트에만 적용됩니다 마지막 항목의.Strikethough text listView 안드로이드에 텍스트 설정

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     listView = (ListView) findViewById(R.id.productList); 
     model = helper.getAllProduct(list); 
     startManagingCursor(model); 

     listView.setAdapter(new ShoppingListAdapter(this,model)); 
     class ShoppingListAdapter extends ResourceCursorAdapter { 

     public ShoppingListAdapter(Context context ,Cursor c) { 
      super(context,R.layout.productrow,c); 
      // TODO Auto-generated constructor stub 
     } 

     @Override 
     public void bindView(View row, Context context, Cursor c) { 
      // TODO Auto-generated method stub 
      listName = (TextView) row.findViewById(R.id.produtName); 
      final CheckBox listCheck=(CheckBox)row.findViewById(R.id.check); 
      listCheck.setOnCheckedChangeListener(new OnCheckedChangeListener() { 

        @Override 
        public void onCheckedChanged(CompoundButton view, boolean isChecked) { 
         // TODO Auto-generated method stub 
         if(listCheck.isChecked()){ 
           listName.setPaintFlags(listName.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 
          //listName.setTextColor(_context.getResources().getColor(R.color.red)); 
         // listName.setText("go"); 
         } 
        } 

        }); 

아무도 내 실수가 아닐까요?

+0

이미 검사 된 플래그에 대해서도 onCheckedChange 외부에 플래그를 설정하십시오. – Doomsknight

+0

외부에 플래그를 설정 하시겠습니까? 나도 밖에서 setPaintFlag 뜻? 죄송합니다, 안드로이드 프로그래밍에 새로운입니다. – johnk

답변

1

Lalit Poptani가 맞습니다. listview의 재생 메커니즘 때문입니다. 목록을 스크롤하는 동안 이미 만들어진보기가 다시 사용됩니다. 스크롤하는 동안 getview() 메서드가 호출됩니다. 그래서 확인란을 선택했는지 여부를 확인해야합니다. 만약 당신이 페인트 플래그를 설정하고 당신이 페인트 깃발을 제거해야한다는 것을 의미하는지 확인해야합니다.

if(isChecked){ 
    txtview.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG); 
}else{ 
    txtview.setPaintFlags(task_text.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG)); 
} 
+0

예, 그게 내가하고 싶은 ... ....하지만 문제는 여전히 존재합니다. – johnk

3

listName.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG); 

그것은 내 경우에는 일을보십시오.

+0

나중에 작동합니다 ..하지만 첫 번째 항목의 체크 상자를 클릭하면 마지막 항목의 setPaintFlag 만 있습니다. – johnk

+0

최종 키워드로 인해 문제가 발생한 것 같습니다. –

+0

나는 개인적으로 청구했다. 그러나 문제는 이제 마지막 항목의 ... setPaintFlag 만 할 수있다. 첫 번째 항목은 아무것도 변경되지 않는다. – johnk

관련 문제