我正在尝试在通过REST服务获取的UI中填充数据。每次都会出现数据,但UI有时无法填充。 UI是一种列表,但未使用listview。有一个ScrollView,它将LinearLayout作为其子项,然后将行视图添加到linearlayout。有时,即使数据传递给UI,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 :(得分:0)
你正在使用条件
if(list != null && list.isEmpty()) {
mNoData.setVisibility(View.VISIBLE);
}
将其更改为
if(list == null || list.isEmpty()) {
mNoData.setVisibility(View.VISIBLE);
}
答案 1 :(得分:0)
我能够通过添加fillViewPort =&#34; true&#34;进行某些更改来解决问题。对于scrollview。此外,有一个后台线程试图更新UI,因为UI线程正在破坏。这并没有导致崩溃,但UI更新没有发生。通过这两项更改,它可以正常工作。