开发应用程序以将动态数据添加到多个表视图。结构如下。
我在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(" ",""));
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);
}
}
}
我得到的错误如下:
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)
两个循环的循环变量值应相同Inorder获取相应产品的子产品.Iam与上述错误斗争。任何有想法的人.Plz建议我适当的解决方案。谢谢提前。
编辑:
ArrayList<String> productname=new ArrayList<String>();
ArrayList<String> description=new ArrayList<String>();
ArrayList<String> indextitle=new ArrayList<String>();
ArrayList<String> mStrings = new ArrayList<String>();
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 :(得分:12)
好的第二个潜在问题也是: indextl.addView(indextr);
每次循环迭代都会添加indextr,但它是相同的视图。您只能将一次视图添加到层次结构中。您可能希望每个循环迭代都有一个新实例。我不能肯定地说,但这可能是问题。
答案 1 :(得分:6)
试试这个......
ViewGroup parent = (ViewGroup) mViewParent.getParent();
int index = parent.indexOfChild(mViewParent);
parent.removeView(mViewParent);
parent.addView(mNewView_U_want_to_add);
答案 2 :(得分:3)
onCreate with activity或onCreateView with fragment。
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) {}
答案 3 :(得分:2)
该异常实际上看起来是由以下原因造成的:
indextl.addView(indextr,6);
问题似乎是您尝试在第6个索引处添加视图,但没有任何项目存在:
java.lang.IndexOutOfBoundsException: index=6 count=0