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;ireturn((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);