【问题标题】:Android: view - child already has a parentAndroid:查看 - 孩子已经有父母
【发布时间】:2013-12-07 18:48:34
【问题描述】:

所以我有一个我无法处理的小问题......检查代码并阅读Logcat,有什么想法吗?

代码:

for(int i = 0; i < jArray.length(); ++i){
    JSONObject json_data = jArray.getJSONObject(i);

    //                                      
    String paskaita = json_data.getString("paskaita");
    String laikas = json_data.getString("laikas");
    String savaite = json_data.getString("savaite");                                        
    String auditorija = json_data.getString("auditorija");
    String destytojas = json_data.getString("destytojas");                                      
    String dalykas = json_data.getString("dalykas");
    String tipas = json_data.getString("tipas");


    //Just adding view                              
    TextView pask = (TextView) Item.findViewById(R.id.paskaita);
    pask.setText(paskaita);

    TextView laik = (TextView) Item.findViewById(R.id.laikas);
    laik.setText(laikas);

    TextView sav = (TextView) Item.findViewById(R.id.savaite);
    sav.setText(savaite);

    TextView dest = (TextView) Item.findViewById(R.id.destytojas);
    dest.setText(destytojas);

    TextView aud = (TextView) Item.findViewById(R.id.auditorija);
    aud.setText(auditorija);

    TextView dal = (TextView) Item.findViewById(R.id.dalykas);
    dal.setText(dalykas);

    TextView tip = (TextView) Item.findViewById(R.id.tipas);
    tip.setText(tipas);

    ln.addView(Item);

}

Logcat 输出:

12-07 19:00:27.558: E/AndroidRuntime(280): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

【问题讨论】:

  • 不要使用getString,而是使用optString(name, fallback),看看这是否能解决您的问题。
  • 为什么用 ++i 而不是 i++?
  • 但是我的问题是 jArray 的大小,正如我上面所说,如果 jArray 是 [{...}] 它可以工作,但如果它是 [{...},{...},{ ...}] 它没有。
  • 你能粘贴 LogCat 的输出吗?
  • @vandus ++i 可以是faster in C type languages,有些人就是喜欢这种风格。 Java 中 for 循环的差异为 0。只是风格问题。

标签: java android json view parent


【解决方案1】:

好的,它与您的 JSONObject 无关。

Logcat 说明了一切。您添加一个已经有父级的 TextView。所以你可能想创建一个布局,并在你的 for 循环中

for(int i = 0; i < jArray.length(); ++i){
JSONObject json_data = jArray.getJSONObject(i);

//                                      
String paskaita = json_data.getString("paskaita");
String laikas = json_data.getString("laikas");
String savaite = json_data.getString("savaite");                                        
String auditorija = json_data.getString("auditorija");
String destytojas = json_data.getString("destytojas");                                      
String dalykas = json_data.getString("dalykas");
String tipas = json_data.getString("tipas");

// Create a new view every time.
View Item = View.inflate(ln.getContext(), layoutID, null);


//Just adding view                              
TextView pask = (TextView) Item.findViewById(R.id.paskaita);
pask.setText(paskaita);

TextView laik = (TextView) Item.findViewById(R.id.laikas);
laik.setText(laikas);

TextView sav = (TextView) Item.findViewById(R.id.savaite);
sav.setText(savaite);

TextView dest = (TextView) Item.findViewById(R.id.destytojas);
dest.setText(destytojas);

TextView aud = (TextView) Item.findViewById(R.id.auditorija);
aud.setText(auditorija);

TextView dal = (TextView) Item.findViewById(R.id.dalykas);
dal.setText(dalykas);

TextView tip = (TextView) Item.findViewById(R.id.tipas);
tip.setText(tipas);

ln.addView(Item);

}

【讨论】:

  • 非常感谢!有用。我是 Android 新手,我喜欢这个页面。
猜你喜欢
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-19
相关资源
最近更新 更多