2014-04-01 50 views
1

我试图填充通过REST服务获取的UI中的数据。数据每次都出现,但UI有时不会填充。 UI是一种列表,但listview没有被使用。有一个ScrollView,其中有LinearLayout作为其子,然后行视图被添加到linearlayout。有时候,即使数据被传递给它,UI也不会被更新。Android有时不会在UI中更新

private void showData(List list) { 
if(list != null && list.isEmpty()) { 
    mNoData.setVisibility(View.VISIBLE); 
} else { 
    mNoData.setVisibility(View.GONE); 

    final LinearLayout linearLayout = (LinearLayout) findViewById(R.id.details_layout); 

    findViewById(R.id.details_progress).setVisibility(View.GONE); 

    linearLayout.removeAllViews(); 
    LayoutInflater layoutInflater = getLayoutInflater(); 
    View rowView = null; 
    TextView txtName = null; 
    Button buttonPlay = null; 

    for (int i = 0; i < list.size(); i++) { 
     rowView = layoutInflater.inflate(R.layout.row_view, null); 
     txtName = (TextView) rowView.findViewById(R.id.row_view_name); 
     buttonPlay = (Button) rowView.findViewById(R.id.row_view_button_play); 
     final Item item = (Item) list.get(i); 
     rowView.setTag(i) ; 
     txtName.setText(item.getName()); 
     final RecentItem recentItem = RecentsManager.getInstance().getRecentItemFromRefID(item.getId()); 

     if (recentItem !=null) { 
      buttonPlay.setText(getString("Resume")); 
      buttonPlay.requestFocus(); 
     } 

     buttonPlay.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (recentItem!=null) { 
        //do some action 
       } else { 
        //do some action 
       } 

       finish(); 
      } 
     }); 

     final int tag = (Integer) rowView.getTag() ; 
     rowView.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //do some action 
      } 
     }) ; 

     txtName.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //do some action 
      } 
     }); 

     buttonPlay.setId(i); 

     if(i < list.size()) 
      buttonPlay.setNextFocusDownId(i+1); 

     linearLayout.addView(rowView); 

     if (i == 0) { 
      buttonPlay.requestFocus(); 
      buttonPlay.setNextFocusUpId(mButtonReminder.getId()); 

      if(mButtonReminder != null) { 
       mButtonReminder.setNextFocusDownId(buttonPlay.getId()); 
      } 
     } else { 
      buttonPlay.setNextFocusUpId(i-1); 
     } 
    } 
} 
} 

我甚至检查的LinearLayout孩子的次数和数量始终等于列表的大小,这意味着行也将被添加到它,但它只是没有在UI上显示出来。

可能是什么问题?

+0

有人可以指出什么是这里的问题?有时,需要添加的行数大约是400.这可能是一个问题吗? – mobiledev

回答

0

我能够做某些变化将fillViewPort =“真”了滚动来解决问题。此外,还有一个后台线程试图更新UI,因为哪个UI线程正在中断。这并没有导致崩溃,但UI更新没有发生。有了这两个改变,它工作正常。

0

您使用条件

if(list != null && list.isEmpty()) { 
    mNoData.setVisibility(View.VISIBLE); 
} 

改变它

if(list == null || list.isEmpty()) { 
    mNoData.setVisibility(View.VISIBLE); 
} 
+0

我认为在它的实例上调用isEmpty方法之前,必须进行空检查。正如我所说的那样,数据已收到,但只有它在屏幕上不可见。 – mobiledev

+0

@mobiledev显示您的布局。正如你所说,子视图是以线性布局添加的,所以我认为你的布局存在问题。 – Ali