UI有时在Android中不会更新

时间:2014-04-01 06:21:34

标签: android user-interface scrollview

我正在尝试在通过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上。

可能是什么问题?

2 个答案:

答案 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更新没有发生。通过这两项更改,它可以正常工作。