Android의 listview 및 expandablelistview는보기를 재활용합니다. 더 많은 정보 : The nuance of android listview. 의 getView는 목록보기의 유일한 방법 인 반면다른 하위 레이아웃을 사용하여 Expandablelistview에서 재활용을 처리하는 방법은 무엇입니까?
나는 그런 것을 처리하지만 그들은뿐만 아니라 Expandablelistview에 목록보기 만 예를 제공하는 방법에 대한 위의 링크로 기사와 정보를 읽었습니다 (expandablelistview에서 getGroupView이있는 동안 및 getChildView).
내 확장 가능한 listview의 하위 노드는 응용 프로그램의 출력을 달성하는 데 필요하므로 다른 레이아웃이 필요합니다.
지금, 내 질문은 올바르게 자식의 다른 레이아웃을 부 풀릴 수있는 확장 가능한 목록보기의 재활용을 어떻게 처리 할 수 있습니까? 예 : viewHolder 또는 convertable 내 expandablelistview의 getChildView 메소드에 넣으십시오.
아래의 코드를 따르면 site에서 위치에 따라 다른 레이아웃을 부 풀릴 수 있습니다.
다른 그룹을 클릭 할 때마다. 이전 그룹의 하위 뷰는 기본값으로보기를 재활용하므로 스피너와 텍스트 값 편집이 유지되지 않습니다. 나는 그것이 아마 다시보기를 부풀게하기 때문에 그것의 아마 생각한다?
다음은 내 getChildView 방법 :
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
//layoutInflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
//convertView = layoutInflater.inflate(R.layout.expandable_child_layout, parent, false);
try{
int itemType = getChildType(groupPosition, childPosition);
switch(itemType){
case 0:
ViewHolder mainHolder = null;
View v1 = null;
if(v1 == null){
mainHolder = new ViewHolder();
v1 = View.inflate(context, R.layout.newtrip_main, null);
v1.setTag(mainHolder);
mainHolder.tripType = (Spinner) v1.findViewById(R.id.spinTripType);
/*TripTypeAdapter = new ArrayAdapter<String>(NewTrip.this, android.R.layout.simple_spinner_item,getResources().getStringArray(R.array.triptypes)); //selected item will look like a spinner set from XML
TripTypeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
tripType.setAdapter(TripTypeAdapter);*/
mainHolder.tripType.setOnItemSelectedListener(this);
}//else{
//mainHolder = (ViewHolder) v1.getTag();
//}
return v1;
//break;
case 1:
ViewHolder budgetHolder = null;
View v2 = null;
if(v2 == null){
budgetHolder = new ViewHolder();
v2 = View.inflate(context, R.layout.newtrip_budget, null);
v2.setTag(budgetHolder);
budgetHolder.budget = (Spinner) v2.findViewById(R.id.spinBudget);
budgetHolder.budgetAdapter = new ArrayAdapter<String>(NewTrip.this, android.R.layout.simple_spinner_item,getResources().getStringArray(R.array.budgettype)); //selected item will look like a spinner set from XML
budgetHolder.budgetAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
budgetHolder.budget.setAdapter(budgetHolder.budgetAdapter);
budgetHolder.budget.setOnItemSelectedListener(this);
}
return v2;
//break;
case 2:
ViewHolder foodHolder= null;
View v3 = null;
if(v3 == null){
foodHolder = new ViewHolder();
v3 = View.inflate(context, R.layout.newtrip_food, null);
v3.setTag(foodHolder);
}
return v3;
//break;
case 3:
ViewHolder accomHolder= null;
View v4 = null;
if(v4 == null){
accomHolder = new ViewHolder();
v4 = View.inflate(context, R.layout.newtrip_accommodation, null);
v4.setTag(accomHolder);
accomHolder.accommodation = (Spinner) v4.findViewById(R.id.spinAccommodation);
accomHolder.accommodationAdapter = new ArrayAdapter<String>(NewTrip.this, android.R.layout.simple_spinner_item,getResources().getStringArray(R.array.economicalAccomodation)); //selected item will look like a spinner set from XML
accomHolder.accommodationAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
accomHolder.accommodation.setAdapter(accomHolder.accommodationAdapter);
//return convertView;
}
return v4;
//break;
}
}catch(Exception e){
Toast toast = Toast.makeText(context, e.toString(), Toast.LENGTH_LONG);
toast.show();
}
convertView.invalidate();
return convertView;
}
여기에 getGroupView 방법입니다 :
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
convertView = View.inflate(context, R.layout.expandable_group_layout, null);
TextView txtView = (TextView) convertView.findViewById(R.id.txt1);
if(groupPosition == 0) {
txtView.setText(" MAIN");
txtView.setTextSize(15f);
}
if(groupPosition == 1) {
txtView.setText(" BUDGET");
txtView.setTextSize(15f);
}
if(groupPosition == 2) {
txtView.setText(" FOOD");
txtView.setTextSize(15f);
}
if(groupPosition == 3) {
txtView.setText(" ACCOMMODATION");
txtView.setTextSize(15f);
}
convertView.invalidate();
return convertView;
}
무시하려고하지만 난 널 포인터 예외가 있어요. 위의 질문에서 내가 만난 오류를 추가 할 것입니다. – cribal48
ViewHolder를 사용하여 convertView의 태그를 설정해야합니다. 업데이트 코드 –
여전히 같은 오류가 있습니다. LogCat을 게시하고 있습니다. – cribal48