2013-09-24 4 views
2

getView()를 재정의 한 사용자 정의 ArrayAdapter를 사용하여 내 Android 활동의 레이아웃에서 GridView를 채우려고합니다. 앱을 실행하면 GridView가 화면에 나타나지만 완전히 비어 있습니다. 나는 getView()가 결코 호출되지 않는다는 점을 추론했다. 나는 ArrayList가 비어 있지 않았는지 확인했다. 일부 로그 문 (안드로이드 프로그래밍에 익숙하지 않은 경우 System.out.print()와 유사)을 사용하여 어댑터에 전달 된 ArrayList가 비어 있지 않지만 어댑터의 getCount() 메서드가 비어 있지 않은 것으로 나타났습니다. 항상 0을 반환했습니다. getView()가 호출되어 getView() 및 mObjects를 발생시키는 것으로 판단되는 일부 안드로이드 소스 코드를 살펴 보려고했습니다. 그것 모두는 꽤 똑바로 보인다. 그리고 나는 틀린 무엇이라도 발견하지 않았다. 반 - 기적에 대한 설명을 배제한 지금까지 나는 (아마 아마추어 프로그래머 인 것 같아서) 비어있게되었습니다. 어떤 도움이라도 대단히 감사하겠습니다.ArrayAdapter getView()가 호출되지 않음

활동 파일 :

어댑터 파일
import java.util.ArrayList; 

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.util.Log; 
import android.view.*; 
import android.widget.*; 

public class LevelMapActivity extends FragmentActivity implements View.OnClickListener{ 

    public final int TOTAL_LEVELS = 12;//TODO Set TOTAL_LEVELS to figure out how many levels exist. 
    public final int COLUMNS = 5; 

    GridView grid; 
LevelSelectorAdapter adapter; 
ArrayList<LevelSelector> levels; 

@Override 
public void onCreate(Bundle savedInstanceState){ 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_level_map); 

    grid = (GridView)findViewById(R.id.GridView_LevelMap); 
    grid.setNumColumns(COLUMNS); 

    levels = new ArrayList<LevelSelector>(); 

    for(int i=0; i<TOTAL_LEVELS/5; i++){ 
     for(int j=0; j<5; j++){ 
      LevelSelector levelSelector = new LevelSelector(this, i*COLUMNS+j+1); 
      levels.add((i*COLUMNS)+j, levelSelector); 
     } 
    } 
    for(int j=0; j<TOTAL_LEVELS%5; j++){ 
     LevelSelector levelSelector = new LevelSelector(this, TOTAL_LEVELS-(COLUMNS-1)+j); 
     levels.add(j+TOTAL_LEVELS-COLUMNS, levelSelector); 
    } 

    adapter = new LevelSelectorAdapter(this, R.layout.level_selector, levels); 
    grid.setAdapter(adapter); 

}//ends onCreate() 

@Override 
public void onPause(){ 

    // TODO Auto-generated method stub 
    super.onPause(); 

}//ends onPause() 

@Override 
public void onClick(View view){ 

    // TODO Auto-generated method stub 

}//ends onClick() 

}//ends Class 

:

import java.util.ArrayList; 

import android.content.Context; 
import android.util.Log; 
import android.view.*; 
import android.widget.*; 

public class LevelSelectorAdapter extends ArrayAdapter<LevelSelector>{ 

Context context; 
int resource; 
ArrayList<LevelSelector> levelSelectors; 

public LevelSelectorAdapter(Context context, int resource, ArrayList<LevelSelector> levelSelectors){ 

    super(context, resource); 
    this.context = context; 
    this.resource = resource; 
    this.levelSelectors = levelSelectors; 

}//ends LevelSelectorAdapter() 

public static class ViewHolder{ 
    public TextView level; 
    public TextView time; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent){ 

    View view = convertView; 
    ViewHolder holder; 

    if(view == null){ 
     LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(resource, null); 
     holder = new ViewHolder(); 
     holder.level = (TextView)view.findViewById(R.id.TextView_LevelSelector_Level); 
     holder.time = (TextView)view.findViewById(R.id.TextView_LevelSelector_Time); 
     view.setTag(holder); 
    } 
    else{ 
     holder = (ViewHolder)view.getTag(); 
    } 

    final LevelSelector levelSelector = levelSelectors.get(position); 
    if(levelSelector != null){ 
     holder.level.setText(Integer.toString(levelSelector.getLevel())); 
     holder.time.setText(Integer.toString(levelSelector.getTime())); 
    } 

    return view; 

}//ends getView() 

}//ends Class 

답변

2

때문에 나는 getView() 메서드를 재정의하려고 어댑터 실험했던 방법 중 하나, 나는에 대한 이전에 필요 없었다 배열은 생성자에서 어댑터로 전달됩니다.
슈퍼 생성자에 배열을 전달하면 초기화되고 따라서 getCount() 메서드 내에서 사용할 수 있습니다. 그래서 배열이 비어 있지 않은데도 getCount()이 매번 0으로 나왔습니다.

관련 문제