좋아, 그래서 사용자 정의 어댑터와 함께 그리드보기, 4 열을 사용하려고 해요. 매우 이상한 두 가지 문제가 발생했습니다.안드로이드 이상한 문제 GridView
문제 # 1 : 매우 이상합니다.로드 될 때 행 1 열 1이 비어 있습니다. 그런 다음 스크롤을 시작하면 첫 번째 행의 첫 번째 열이 비게됩니다. 그러나 맨 위로 다시 스크롤하면 그 빈보기가 나타납니다.
Issue # 2 : 일단 스크롤을 시작하면 맨 위로 빠르게 날아 가면 그리드가 경계를 넘고 아무 것도 볼 수없는 지점까지 스크롤하면 그리드를 스크롤 할 수 없습니다. 잃어 버렸거나 완전히 보이지 않습니다.
API 21을 타겟팅하므로 Lolipop 장치에 있습니다. 그러나 이것을 kitkat 4.4.2에서 테스트하고 똑같은 동작을 얻었습니다. 당신 그래서
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<GridView
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="4"/>
</RelativeLayout>
활동, 초기화 gridview에
ArrayList<AppDetail> appList = getInstalledApps();
AppGridAdapter adapter = new AppGridAdapter(this, android.R.layout.simple_gallery_item, appList);
GridView gridView = (GridView)findViewById(R.id.gridView);
gridView.setAdapter(adapter);
AppGridAdapter.java (수입 제거)
public class AppGridAdapter extends ArrayAdapter<AppDetail> {
public AppGridAdapter(Context context, int rid, List<AppDetail> list) {
super(context, rid, list);
}
public View getView(int position, View view, ViewGroup parent) {
if (view == null) {
LayoutInflater inflater =
(LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.app_grid_item, parent, false);
// set width/height = 1/4 parent width
int len = parent.getWidth()/4;
AbsListView.LayoutParams params = (AbsListView.LayoutParams)view.getLayoutParams();
params.width = len;
params.height = len;
view.setLayoutParams(params);
ViewHolder holder = new ViewHolder();
holder.imgIcon = (ImageView)view.findViewById(R.id.imgAppIcon);
holder.tvLabel = (TextView)view.findViewById(R.id.tvAppLabel);
view.setTag(holder);
}
AppDetail app = getItem(position);
ViewHolder holder = (ViewHolder)view.getTag();
holder.imgIcon.setImageDrawable(app.icon);
holder.tvLabel.setText(app.label);
return view;
}
private static class ViewHolder {
ImageView imgIcon;
TextView tvLabel;
}
}
: 여기
내의 GridView 레이아웃/초기화 활동 레이아웃입니다 코드가 매우 간단하고 간단하다는 것을 알 수 있습니다. 이것은 항상 내 사용자 지정 어댑터에 사용했던 형식입니다. 나는 그것에 대해 아무런 단서가 없다. 아이디어가 있으십니까? 감사합니다. .
디버거 (또는 로깅)의 코드를 단계별로 실행하고 'parent.getWidth()'가 0이 아닌지 확인 했습니까? 가능한 유일한 문제일지도 모르는 것처럼 보입니다. 첫 번째 뷰를 가져올 때 너무 일찍 호출되었을 가능성이 있습니다. – blad
아이는 이미 팽창 된 그 시점에서 팽창하기로되어 있기 때문에 나는 생각했다. 그러나 설명 된 몇 가지 항목을 제외하고는 다른 모든 항목이 올바르게 표시됩니다. –
당신은 꽤 가까이에있는 것 같지 않아요. –