gpt4 book ai didi

java - 如何在 ListView 适配器线性布局中添加项目

转载 作者:行者123 更新时间:2023-11-30 08:46:17 25 4
gpt4 key购买 nike

我知道如何填充 ListView ,我知道如何制作自定义适配器。我想在 ListView 的 rowLayout 的线性布局中添加 View 。这是 MyList 适配器。

我想要一个 ListView ,每个项目布局都是在运行时创建的,但我无法实现。

这段代码在没有 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;
}

现在我得到一个错误

指定的子项已有父项。您必须先对 child 的 parent 调用 removeView()。在这条线上

 Holder.linearLayout.addView(kmapModel.getLinearLayout());

Q1) 如何解决这个问题Q2) 为什么我会遇到这个问题?

谢谢@pskink,他给了我一个尝试的方法然后我上传了解决方案。

最佳答案

The specified child already has a parent.

停止试图给 child 第二个 parent 。所有 View 均来自 splinter 的房屋。他们只有一个 parent 。

您可以在 View 中添加 View ,不能添加已经添加的 View 。这导致循环和循环是循环的。并且要成功迭代 View 树,它需要是一棵树。所以 View 只有一个 parent 。要么清除您已有的布局并使用它,要么向布局添加新 View 或基本上任何您想要的不涉及在 View 树中的多个位置使用相同对象的内容。

关于java - 如何在 ListView 适配器线性布局中添加项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32920425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com