您必须使用AsyncTask中的AddView调用removeView()

时间:2015-02-25 19:35:15

标签: android android-asynctask android-linearlayout

我动态创建一个表,如下所述 并且运作良好....

http://s24.postimg.org/wgofs717p/ex_Tables.png

mLinearLayout.removeAllViews()
MyTableLayout mTableLayout = new MyTableLayout(...);
for (int j = 0; j < numberOfTables; j++) {
    for i =0; i<numberOfLines; i++{
        View v = LayoutInflater.from(context).inflate(
        R.layout.line_layout,((ViewGroup) MyTableLayout.getChildAt(i)), false);
        ((TextView) v.findViewById(R.id.numeroRespostaDialogId)).setText("text");
        (ViewGroup) tableLayout.getChildAt(i)).addView(v);
        }
    mLinearLayout.addView(mTableLayout);
}

现在我需要把它放在AsyncTask中创建 而且我基本上没有使用AsyncTask

那样做
protected ArrayList<MyTableLayout> doInBackground(Void... params) {
        mArray<MyTableLayout>
        MyTableLayout mTableLayout = new MyTableLayout(...);
        for (int j = 0; j < numberOfTables; j++) {
            for i =0; i<numberOfLines; i++{
                View v = LayoutInflater.from(context).inflate(
                R.layout.line_layout,((ViewGroup) MyTableLayout.getChildAt(i)), false);
                ((TextView) v.findViewById(R.id.numeroRespostaDialogId)).setText("text");
                (ViewGroup) tableLayout.getChildAt(i)).addView(v);
        }
        mArray.addView(mTableLayout);
    }
    return mArray;  
    }

    onPostExecute(){
        mLinearLayout.removeAllViews()
        for i=0  to mArray.size ++{
            mLinearLayout.addView(mArray[i]);
            }
        }

使用此AsyncTask我收到错误

java.lang.IllegalStateException:指定的子级已有父级。您必须首先在孩子的父母身上调用removeView()。

并将removeAllViews()放入OnPostExecute的“For”...但是只显示最后一列; 如何使用AsyncTask迭代一组Views ...

在LinearLayout中添加视图

我无法理解为什么AsyncTask工作以及我在AsyncTask中输入错误

感谢您的帮助...

------------------编辑------ 这项工作... = /但为什么没有使用“For”

onPostExecute(){
  //for (int i = 0; i < myArray.size(); i++) {
    mLinearLayout.addView(myArray.get(0));
    mLinearLayout.addView(myArray.get(1));
    mLinearLayout.addView(myArray.get(3));
  //}
 }

// ---------- EDIT2 --------------------

我不知道为什么......但工作没有任何改动= D

1 个答案:

答案 0 :(得分:0)

我经常这样做......

if(itemView.getParent() != null){
   ((ViewGroup)itemView.getParent()).removeView(itemView);
}