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