ดังนั้นผมจึงมีปัญหานี้ผมมีมาก่อนและเป็นธรรมชาติที่ฉันขอความช่วยเหลือได้ที่นี่ คำตอบของ Luksprog นั้นยอดเยี่ยมเพราะฉันไม่รู้ว่า ListView และ GridView ปรับตัวเองอย่างไรด้วยการรีไซเคิล Views ดังนั้นด้วยคำแนะนำของเขาฉันสามารถเปลี่ยนวิธีที่ฉันเพิ่ม Views ให้กับ 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 และตำแหน่งที่ 8 รวมทั้งทำให้ตำแหน่งที่สองอยู่ในตำแหน่งที่ 8 ตอนนี้ฉันยังคงพยายามใช้งาน ListView และ GridView อยู่ดี ไม่เข้าใจว่าทำไมสิ่งนี้เกิดขึ้น หนึ่งในสาเหตุหลักที่ฉันทำคำถามนี้คือการช่วยเหลือผู้อื่นที่อาจไม่ทราบเกี่ยวกับมุมมองการรีไซเคิลของ ListView และ GridView หรือวิธีที่บทความนี้นำมาใช้เป็นกลไก ScrapView
แก้ไขภายหลัง
การเพิ่มลิงค์ไปยัง google IO talk นั้นเป็นสิ่งที่คุณต้องเข้าใจว่า ListView ทำงานอย่างไร ลิงก์เสียชีวิตในจากความคิดเห็น ดังนั้น user3427079 ก็ดีพอที่จะอัพเดทลิงค์นั้น ที่นี่มีไว้สำหรับเข้าถึงได้ง่าย
0
)
ListView
ต้องการให้แถวใหม่แสดง (เช่นเลื่อนขึ้น / ลงอย่างต่อเนื่อง) ปัญหาคือว่ามุมมองที่เพิ่งหายไปและที่จะใช้ในตำแหน่งที่ต้องการในอนาคตได้TextView
เพิ่มไปแล้วมันเป็นปัญหา จะแก้ปัญหาได้คุณต้องเอามันออกไปในgetView
วิธีการถ้าgetView
วิธีการที่เรียกว่าสำหรับตำแหน่งอื่น ๆ 0
ที่ไม่ใช่