Android 如何将多个对象添加到行中
我正试图将一些对象添加到Android 如何将多个对象添加到行中,android,Android,我正试图将一些对象添加到TableRow,但出现以下错误: 05-11 13:43:34.494: E/AndroidRuntime(3258): FATAL EXCEPTION: main 05-11 13:43:34.494: E/AndroidRuntime(3258): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the c
TableRow
,但出现以下错误:
05-11 13:43:34.494: E/AndroidRuntime(3258): FATAL EXCEPTION: main
05-11 13:43:34.494: E/AndroidRuntime(3258): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
05-11 13:43:34.494: E/AndroidRuntime(3258): at android.view.ViewGroup.addViewInner(ViewGroup.java:3618)
05-11 13:43:34.494: E/AndroidRuntime(3258): at android.view.ViewGroup.addView(ViewGroup.java:3489)
05-11 13:43:34.494: E/AndroidRuntime(3258): at android.widget.TableLayout.addView(TableLayout.java:425)
05-11 13:43:34.494: E/AndroidRuntime(3258): at android.view.ViewGroup.addView(ViewGroup.java:3434)
这是我的密码:
public class LruView extends TableLayout
{
private Context c;
public LruView(Context context, AttributeSet attrs)
{
super(context, attrs);
this.c = context;
}
public LruView(Context context)
{
super(context);
this.c = context;
}
public void setData(BaseAdapter mAdapter)
{
int columnCounter = 0;
int totalColumns = getNumColumns();
for (int i = 0; i < mAdapter.getCount(); i++)
{
if (i < totalColumns)
{
TableRow mTableRow = new TableRow(c);
for (int j = 0; j < totalColumns; j++)
{
View mView = mAdapter.getView(columnCounter, null, null);
mTableRow.addView(mView);
this.addView(mTableRow);
columnCounter++;
}
}
}
}
public int getNumColumns()
{
float scalefactor = getResources().getDisplayMetrics().density * 100;
int number = ((Activity) c).getWindowManager().getDefaultDisplay().getWidth();
int columns = (int) ((float) number / (float) scalefactor);
int deviceOrientation = getResources().getConfiguration().orientation;
if (Configuration.ORIENTATION_LANDSCAPE == deviceOrientation)
return ((columns - 3) <= 2) ? 3 : (columns - 3);
else
return ((columns - 1) <= 2) ? 2 : (columns - 1);
}
}
public类LruView扩展了TableLayout
{
私有上下文c;
公共LruView(上下文、属性集属性)
{
超级(上下文,attrs);
c=上下文;
}
公共LruView(上下文)
{
超级(上下文);
c=上下文;
}
public void setData(BaseAdapter mAdapter)
{
int columnCounter=0;
int totalColumns=getNumColumns();
对于(int i=0;i return((columns-3)问题在于,您正在尝试向TableRow中添加一个已经有父视图的视图,在这一行中:
View mView = mAdapter.getView(columnCounter, null, null);
因此,我将做以下工作:
我将创建一个布局,用于将其添加到表行中。然后,我以与您相同的方式获取所需的数据,如下所示:
View mView = mAdapter.getView(columnCounter, null, null);
当然,在对布局进行膨胀之后,使用mView的数据进行布局。然后我将布局添加到TableRow中。基本上是这样的:
LayoutInflater inflater = LayoutInflater.from(context);
View layout = (View)inflater.inflate(R.layout.my_view_to_add);
View mView = mAdapter.getView(columnCounter, null, null);
//....get widgets from layout and set their data(i.e: text in a TextView)using what you fetch from mView.
....
mTableRow.addView(layout);
请发布完整的日志和课程的开头。我想问题出在这行this.addView(mTableRow);
应该在循环之外,而不是添加到“this”上。@YoannHercouet请检查我的编辑。经过一些调试,我发现实际问题出在这行->TableRow mTableRow=new TableRow(c);