그래서 나는 이전에이 문제가 있었고 당연히 여기 에 도움을 요청 했다 . Luksprog의 대답은 ListView와 GridView가 재활용 뷰로 어떻게 최적화되는지 전혀 알지 못했기 때문에 훌륭했습니다. 그래서 그의 조언으로 그리드 뷰에 뷰를 추가하는 방법을 변경할 수있었습니다. 문제는 이제 이해가되지 않는 것입니다. 이것은 getView
나의 것입니다 BaseAdapter
:
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
convertView = inflater.inflate(R.layout.day_view_item, parent, false);
}
Log.d("DayViewActivity", "Position is: "+position);
((TextView)convertView.findViewById(R.id.day_hour_side)).setText(array[position]);
LinearLayout layout = (LinearLayout)convertView.findViewById(R.id.day_event_layout);
//layout.addView(new EventFrame(parent.getContext()));
TextView create = new TextView(DayViewActivity.this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 62, getResources().getDisplayMetrics()), 1.0f);
params.topMargin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
params.bottomMargin = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, getResources().getDisplayMetrics());
create.setLayoutParams(params);
create.setBackgroundColor(Color.BLUE);
create.setText("Test");
//the following is my original LinearLayout.LayoutParams for correctly setting the TextView Height
//new LinearLayout.LayoutParams(0, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, getResources().getDisplayMetrics()), 1.0f)
if(position == 0) {
Log.d("DayViewActivity", "This should only be running when position is 0. The position is: "+position);
layout.addView(create);
}
return convertView;
}
}
스크롤 할 때 문제가 발생하며 위치 0이 아닌 위치 6에 위치합니다. 위치 6과 위치 8처럼 보이고 위치 8에 2를 넣습니다. 이제 여전히 ListView와 GridView를 사용하여 정지하려고합니다. 왜 이런 일이 일어나고 있는지 이해하지 못합니다. 내가이 질문을하는 주된 이유 중 하나는 ListView와 GridView의 재활용보기 또는이 기사 가 그것을 어떻게 다루는 지에 대해 모르는 다른 사람들을 돕기 위해 ScrapView 메커니즘입니다.
나중에 편집
기본적으로 ListView 작동 방식을 이해하는 데 필요한 모든 Google IO 토크에 대한 링크 추가 댓글에서 링크가 죽었습니다. 따라서 user3427079는 해당 링크를 업데이트하기에 충분했습니다. 여기 에 쉽게 접근 할 수 있습니다.
0
) 에 대한 변경 사항을 되돌릴 수있는 코드가 필요하다는 것 입니다.
ListView
새 행 이 필요할 때 (아래로 스크롤 / 업으로 계속 하는 등) 나중에 사용될 수 있음을 의미 합니다. 문제는 방금 사라지고 앞으로 필요한 위치에서 사용될 뷰가 TextView
이미 추가 되었다는 것 입니다. 이것이 문제입니다. 문제를 해결하려면 메소드가 이외의 위치에 대해 호출 된 getView
경우 메소드 에서 제거해야합니다 . getView
0