2014-04-01 54 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