listview를 채우는 방법을 알고 있으며 사용자 지정 어댑터를 만드는 방법을 알고 있습니다. ListView의 rowLayout의 선형 레이아웃 안에 View를 추가하고 싶습니다. 다음은 MyList 어댑터입니다.
각 항목 레이아웃이 런타임에 생성되는 목록보기를 원하지만 이것을 얻을 수 없습니다.
이 코드는 ListView없이 작동하지만 listview 내부의 Linearlayout에 추가하면 오류가 발생합니다.
public class KmapListAdapter extends BaseAdapter {
Context context;
LayoutInflater layoutInflater;
List<KmapModel> mOriginalValues = new ArrayList<KmapModel>();
public KmapListAdapter(Context activity, List<KmapModel> kmapModelList) {
this.context = activity;
this.mOriginalValues = kmapModelList;
}
@Override
public int getCount() {
if(mOriginalValues == null)
return 0;
return mOriginalValues.size();
}
@Override
public Object getItem(int position) {
return mOriginalValues.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
ViewHolder Holder ;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
KmapModel kmapModel;
if (layoutInflater == null)
layoutInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
Holder = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.rowlayout, null);
Holder.linearLayout = (LinearLayout) convertView.findViewById(R.id.linear_layout_matrix_1);
convertView.setTag(Holder);
} else
Holder = (ViewHolder) convertView.getTag();
kmapModel = mOriginalValues.get(position);
Holder.linearLayout.addView(kmapModel.getLinearLayout());
return convertView;
}
static class ViewHolder {
LinearLayout linearLayout;}}
그리고 그것은 내 모델 목록입니다
public List<KmapModel> ListViewOneItem( int ROWS, int COLS) {
String[][] KmapArray = KMapMaker(ROWS, COLS);
// Log.v("Kmap array",""+KmapArray);
TextView[][] KmapTextView = new TextView[KmapArray.length][KmapArray[0].length];
int temp = 3;
for (int i = 0; i < KmapArray.length; i++) {
KmapModel kmapModel = new KmapModel();
LinearLayout rowLinearLayout = makeRowLinearLayout();
for (int j = 0; j < KmapArray[0].length; j++) {
TextView rowTextView = makeTextView();
rowTextView.setPadding(4, 4, 4, 4);
rowLinearLayout.addView(rowTextView);
KmapTextView[i][j] = rowTextView;// Add a text view in a jagged array for later use
}
kmapModel.setLinearLayout(rowLinearLayout);
kmapModelList.add(kmapModel);
}
return kmapModelList;
}
이제 오류가 발생했습니다.
지정된 하위에 이미 상위가 있습니다. 먼저 자식의 부모에서 removeView ()를 호출해야합니다. 이 줄에
Holder.linearLayout.addView(kmapModel.getLinearLayout());
Q1)이 문제를 해결하는 방법 Q2)이 문제가 발생하는 이유는 무엇입니까?
감사합니다 @pskink 그는 나에게 시도하는 방법을 제공하고 솔루션을 업로드합니다.
지정된 하위에 이미 상위가 있습니다.
아이에게 두 번째 부모를 주려고하지 마십시오. 모든 견해는 부서진 집에서 나온 것입니다. 그들은 한 부모가 있습니다.
보기에보기를 추가 할 수 있지만 이미 추가 된보기는 추가 할 수 없습니다. 이로 인해 루프가 발생하고 루프가 반복됩니다. 그리고 뷰 트리를 성공적으로 반복하려면 트리가되어야합니다. 따라서 뷰는 단 하나의 부모를 얻습니다. 이미 가지고있는 레이아웃을 지우고 사용하거나 레이아웃에 새보기를 추가하거나 기본적으로보기 트리의 여러 위치에서 동일한 개체를 사용하지 않는 원하는 모든 항목을 추가합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다