2013-07-15 3 views
0

BaseAdapter를 확장하는 자체 어댑터를 만들고 GridView에 사용합니다. 요소의 수를 얻어 TextView에 넣기를 원합니다. 내 어댑터를했다 : enter image description hereGridView의 Adapter에있는 요소의 번호가 잘못되었습니다.

위치는 reseted 같다 :

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View gridView; 

     if(convertView == null){ 
      gridView = new View(context); 

      gridView = inflater.inflate(R.layout.grid_element, null); 

      ImageView logo = (ImageView) gridView.findViewById(R.id.grid_logo); 


      TextView tv = (TextView) gridView.findViewById(R.id.grid_textView1); 
      tv.setText(level+position); 
     } 
     else 
      gridView = convertView; 

     return gridView; 
    } 

내가 발사에 화면에없는 요소를 얻을 때까지 좋은 것 같다. 어떻게해야 제대로 할 수 있습니까?

답변

2

convertView가 null이 아닌 경우 TextView를 올바르게 설정하지 않았습니다. 이 시도 :

if (convertView == null) { 
    gridView = inflater.inflate(R.layout.grid_element, null); 
} else { 
    gridView = convertView; 
} 

ImageView logo = (ImageView) gridView.findViewById(R.id.grid_logo); 

TextView tv = (TextView) gridView.findViewById(R.id.grid_textView1); 
tv.setText(level + position); 
+0

재활용 될 때 뷰가 생성되는 경우 (convertView == null를) findViewById()를 사용하고 getTag() 방법에서 다시 얻기보다! 고맙습니다:) –

1

새로운 방문자 도움이 될 수 있습니다. 목록에서 해당 행이 아직 (convertView = null)을 작성하지 않거나으로 재활용되고 있는지 알기 위해, 당신은 convertView가 null의 경우 확인해야

  1. :

    당신은 두 가지 일을 알고있다 어댑터 (convertView != null). 이를 Recycling 프로세스라고합니다.

  2. 다른 중요한 사항은 View Holder Pattern입니다. getView() 메서드의 각 행에 findViewById()을 호출하면 목록 채우기가 무거워지고 스크롤 성능이 저하됩니다. 이를 방지하려면 클래스 필드로 일부보기가있는 정적 클래스를 작성하십시오. 이

`작동

static class ViewHolder { 
    TextView text; 
    ImageView icon; 
} 

ViewHolder holder; 
if(convertView == null) { 
    convertView = inflater.inflate(resource, root); 
    holder = new ViewHolder(); 
    holder.icon = (ImageView) convertView.findViewById(R.id.listitem_image); 
    holder.text = (TextView) convertView.findViewById(R.id.listitem_text); 
    holder.timestamp = (TextView) convertView.findViewById(R.id.listitem_timestamp); 
    holder.progress = (ProgressBar) convertView.findViewById(R.id.progress_spinner); 
    convertView.setTag(holder); 
} 

holder = (ViewHolder) convertView.getTag(); 

// Set here your view's content : 
holder.text.setText("Sample"); 
// ... 
관련 문제