2013-03-16 1 views
3

Приложение разработки Iam для добавления динамических данных в несколько видов таблиц. Структура выглядит следующим образом.issue: У указанного ребенка уже есть родитель. Вы должны сначала вызвать removeView() для родительского родителя

enter image description here Мой код в onPostExecute является:

protected void onPostExecute(List<String> results){ 
int ind,i = 0; 
ScrollView sv=null; 
TableLayout tl=null; 
TableRow tr = null; 
int mjsonlength=results.size(); 
if(results!=null){ 

TableLayout indextl=(TableLayout)findViewById(R.id.indextablelayout); 
    TableRow indextr=new TableRow(SubProducts.this); 
    //indext1.moveToFirst(); 
    LinearLayout llt=(LinearLayout)findViewById(R.id.alltablell); 
    //for(int f=0;f<mjsonlength;f++){ 

     for(ind=0;ind<indextitle.size();ind++) 
     { 

      TextView indextv=new TextView(SubProducts.this); 
      indextv.setBackgroundResource(R.drawable.greenbg); 
      indextv.setHeight(25); 
      indextv.setWidth(50); 
      indextv.setId(6); 
      indextv.setTextColor(Color.WHITE); 
      indextv.setText(indextitle.get(ind)); 
      indextv.setPadding(20,10,6,3); 
      indextr.addView(indextv); 

      indextl.addView(indextr,6); 

      sv=new ScrollView(SubProducts.this); 
      tl=new TableLayout(SubProducts.this); 
      for(i=0;i<mjsonlength;i++){ 
        tr=new TableRow(SubProducts.this); 

        if(ind==i) { 

         RelativeLayout rl=new RelativeLayout(SubProducts.this); 
         Resources res = getResources(); //resource handle 
          rl.setBackgroundResource(R.drawable.prd_box); 

         RelativeLayout.LayoutParams newParams1 = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT, 
            RelativeLayout.LayoutParams.WRAP_CONTENT); 

          image=new ImageView(SubProducts.this); 
          image.setLayoutParams(newParams1); 
          image.setId(1); 
          image.setImageBitmap(bmp); 
          image.setPadding(5, 20, 5, 5); 
          rl.addView(image,1); 



          RelativeLayout.LayoutParams lprams = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT, 
            RelativeLayout.LayoutParams.WRAP_CONTENT); 
          lprams.addRule(RelativeLayout.RIGHT_OF, 1); 

          TextView tv1=new TextView(SubProducts.this); 
         Spanned marked_up = Html.fromHtml(description.get(i)); 
         tv1.setText((marked_up.toString()).substring(1, 170).replaceAll("&nbsp;","")); 
         tv1.setLayoutParams(lprams); 
         tv1.setId(2); 
         tv1.setHeight(150); 
         tv1.setWidth(130); 
         tv1.setPadding(20, 10, 0, 10); 
         rl.addView(tv1,2); 


         RelativeLayout.LayoutParams newParams = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT, 
            RelativeLayout.LayoutParams.WRAP_CONTENT); 
         newParams.addRule(RelativeLayout.BELOW, 2); 
         TextView tv=new TextView(SubProducts.this); 
         tv.setText(productname.get(i)); 
         tv.setLayoutParams(newParams); 
         tv.setTextColor(Color.WHITE); 
         tv.setId(3); 
         tv.setPadding(10, 0, 0, 10); 
         rl.addView(tv,3); 


         tr.addView(rl); 
         tr.setPadding(5, 10, 5, 10); 


        } 
        tl.addView(tr); 

      } 

      sv.addView(tl); 

       llt.addView(sv); 

     } 

    } 

}

получаю ошибку

Iam следующим образом:

 03-16 06:27:07.452: E/AndroidRuntime(7233): FATAL EXCEPTION: main 
     03-16 06:27:07.452: E/AndroidRuntime(7233): java.lang.IllegalStateException: The 03-16 06:27:07.452: E/AndroidRuntime(7233): FATAL EXCEPTION: main 
03-16 06:27:07.452: E/AndroidRuntime(7233): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at android.view.ViewGroup.addViewInner(ViewGroup.java:3339) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at android.view.ViewGroup.addView(ViewGroup.java:3210) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at android.widget.TableLayout.addView(TableLayout.java:429) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at android.view.ViewGroup.addView(ViewGroup.java:3155) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at android.widget.TableLayout.addView(TableLayout.java:411) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at android.view.ViewGroup.addView(ViewGroup.java:3131) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at android.widget.TableLayout.addView(TableLayout.java:402) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at com.example.nutritionplusapp.SubProducts$LongRunningGetIO1.onPostExecute(SubProducts.java:227) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at com.example.nutritionplusapp.SubProducts$LongRunningGetIO1.onPostExecute(SubProducts.java:1) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at android.os.AsyncTask.finish(AsyncTask.java:631) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at android.os.AsyncTask.access$600(AsyncTask.java:177) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at android.os.Looper.loop(Looper.java:137) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at java.lang.reflect.Method.invoke(Method.java:511) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
03-16 06:27:07.452: E/AndroidRuntime(7233):  at dalvik.system.NativeStart.main(Native Method) 
03-16 06:32:07.586: I/Process(7233): Sending signal. PID: 7233 SIG: 9 
03-16 06:32:08.522: E/Trace(7355): error opening trace file: No such file or directory (2) 

Петля значение переменной должно быть одинаковым для обоих контуров Симметричного получить субпродуктов соответствующего продукта. Яйца сражаются с вышеуказанной ошибкой. Любой, у кого есть идея. PLZ предлагает мне правильное решение. Спасибо в Advance ,

EDIT:

ArrayList<String> productname=new ArrayList<String>(); 
ArrayList<String> description=new ArrayList<String>(); 
ArrayList<String> indextitle=new ArrayList<String>(); 
ArrayList<String> mStrings = new ArrayList<String>(); 

под doINBackground:

JSONObject json = array.getJSONObject(i); 

    manJson = json.getJSONObject("product"); 
    mStrings.add(manJson.getString("productimage")); 
    productname.add(manJson.getString("productname")); 
    indextitle.add(manJson.getString("subcategoryid")); 
    description.add(manJson.getString("description")); 
+0

может у поста declation и определения indextitle коллекции на протяжении цикла – Dinesh

+0

Thanq Dinesh.I отредактировал мой вопрос плз посмотреть. – Neeha

+0

Можете ли вы разместить свой формат json string? – Dinesh

ответ

12

Хорошо вторая потенциальная проблема также: indextl.addView (indextr);

indextr добавляет каждую итерацию цикла, но это тот же вид. Вы можете добавить один раз один раз в иерархию. Вероятно, вам нужен новый экземпляр для каждой итерации цикла. Я не могу сказать точно, но это, вероятно, проблема.

+0

thanq James Baca Он решил мою проблему. Но он показывает только один продукт, я имею в виду, что он показывает только 1 подпродукт продукта. Любая проблема в моем цикле. Plz пройти через это, если у вас есть какие-либо идеи. – Neeha

+0

Моей догадкой была бы эта строка: if (ind == i) это может произойти только один раз для подпроизведения ... –

+0

Можете ли вы предложить мне вместо этого заменяющую логику. – Neeha

2

Исключение на самом деле выглядит это вызвано:

indextl.addView(indextr,6);

Проблема кажется, что вы пытаетесь добавьте представление в шестой индекс, но нет никакого мс присутствует:

java.lang.IndexOutOfBoundsException:   index=6 count=0 
+0

thanq James Baca.I решил это. Но теперь я получаю еще одну ошибку, т. е. 03-16 06: 27: 07.452: E/AndroidRuntime (7233): java .lang.IllegalStateException: указанный ребенок уже имеет родителя. Сначала вы должны вызвать removeView() родителя ребенка. – Neeha

+0

Можете ли вы опубликовать обновленную трассировку стека? –

+0

James Baca Я обновил свой файл журнала в вопросе, сам посмотрю. Thanq – Neeha

6

попробовать это ....

ViewGroup parent = (ViewGroup) mViewParent.getParent(); 
int index = parent.indexOfChild(mViewParent); 
parent.removeView(mViewParent); 

parent.addView(mNewView_U_want_to_add); 
3

В OnCreate с активностью или onCreateView фрагментом.

if (view != null) { 
ViewGroup parent = (ViewGroup) view.getParent(); 
if (parent != null) { 
    parent.removeView(view); 
} 
}try { 
view = inflater.inflate(R.layout.fragment_main, container, false); 
} catch (InflateException e) {} 
Смежные вопросы

 Смежные вопросы