2012-11-27 2 views
0

나는 정말로 혼란스러워합니다. 활동 작성시 ArrayAdapter를 한 번 채 웠습니다. 간단한 개체로 채워져 있습니다. 객체의 매개 변수에는 어댑터의 getView() 메소드에서 사용하는 하나의 부울이 있습니다.ArrayAdapter가 스크롤 할 때 약간의 정보를 잃습니다.

MedicalExamination object = getItem(position); //object is acquired at the begining of getView() 

if (!object.isResultAvalible()) 
    viewHolder.attachment.setVisibility(View.GONE); 

내가 위아래로 여러 번 목록을 스크롤 할 때 resultAvalible 부울 변화 시작 (?!) :이 관련된 부분입니다. 객체에 대한 다른 정보는 변하지 않습니다. 필자는 목록 셀에 TextViews에 표시되는 몇 개의 문자열을 보유하고 있습니다. List는 그대로 유지됩니다 ...이 부울 params 외에도 내 ImageView (첨부)가 사라지고 변하게 만듭니다.

내 bollean 매개 변수가 비공개이므로 설정 방법이 없습니다. 그것의 beeing 세트가 생성자에있는 유일한 방법.

나는 어떤 일이 일어나고 있는지 전혀 모른다. 그것에 대해 도움이 필요하다. 때문에 요청에

내 사용자 정의 어댑터 코드 : 당신은 당신이보기가이 행이 사용 된 곳에서 숨겨져있을 수있는 당신의 손 (하나에 재활용 전망을 수있는 고려 취할 필요

private class ExaminationsAdapter extends ArrayAdapter<MedicalExamination> { 
    private int resource; 

    public ExaminationsAdapter(Context context, 
      List<MedicalExamination> objects) { 
     super(context, R.layout.examinations_list_item, objects); 
     resource = R.layout.examinations_list_item; 
    } 

    class ViewHolder { 
     public TextView examinationsNames; 
     public TextView date; 
     public ImageView attachment; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     ViewHolder viewHolder; 
     MedicalExamination object = getItem(position); 

     if (view == null) { 
      LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(resource, null, true); 
      viewHolder = new ViewHolder(); 
      viewHolder.examinationsNames = (TextView) view.findViewById(R.id.examinations_item_title); 
      viewHolder.date = (TextView) view.findViewById(R.id.examinations_item_date); 
      viewHolder.attachment = (ImageView) view.findViewById(R.id.examinations_item_attachment); 

      view.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) view.getTag(); 
     } 

     if (object == null) { 
      return view; 
     } 

     viewHolder.examinationsNames.setText(object.getExaminationsNames()); 
     viewHolder.date.setText(object.getDate()); 

     if (!object.isResultAvalible()) 
      viewHolder.attachment.setVisibility(View.GONE); 

     setOnListTouchListener(view); 
     return view; 
    } 
} 
+0

맞춤 어댑터를 만들었습니까? 작성한 어댑터 코드를 더 추가하십시오. – GamDroid

+0

일부 코드를 게시하십시오. – Atrix1987

+0

맞춤 어댑터 코드를 곧 게시 할 예정입니다. 그냥 너무 오래 걸리지 않을테니까 –

답변

2

)이므로 :

if (!object.isResultAvalible()) { 
    viewHolder.attachment.setVisibility(View.GONE); 
} else { 
    // revert the image status to the default 
    viewHolder.attachment.setVisibility(View.VISIBLE); 
} 
+0

코드를 게시하면 resultAvaible이 참 거짓 인 경우에도 이미지가 항상 표시됩니다. –

+1

@xylian 내 코드를 테스트 해 보셨습니까? 어쩌면 당신은 isResultAvalible() 반환이'false'이면 이미지가 어떻게되는지 설명 할 수있을 것입니다. 내가 이해 한 바에 따르면, 행 레이아웃에'ImageView'가있다. isResultAvailable()이 false를 반환하면'ImageView'가 사라져야한다. 그렇지 않으면'ImageView'가 보여야한다. – Luksprog

+0

저를 용서하십시오, 어리석은 코멘트이었다. 지금 당신의 요점을보고, 코드를 시험해 보겠습니다. –

관련 문제