簡體   English   中英

在linearlayout中添加視圖以編程方式緩慢地工作

[英]add view in linearlayout programmatically working slowly

我的目標是將自定義視圖添加到LinearLayout中。我有自定義arrayList,我將使用for循環添加自定義視圖。這是我的代碼段

    public void replaceCustomView() {
    for (int i = 0; i < insertDataItems().size(); i++) {
        final LayoutInflater inflater = LayoutInflater.from(this);
        final View reView = inflater.inflate(R.layout.item_parent_child_listing, null, false);
        final TextView parentName = reView.findViewById(R.id.tv_parentName);
        final ImageView headerImageView = reView.findViewById(R.id.header_imageView);
        final LinearLayout linearLayout_childItems = reView.findViewById(R.id.ll_child_items);
        final RelativeLayout headerLayout = reView.findViewById(R.id.header_layout);
        final RelativeLayout headerImageLayout = reView.findViewById(R.id.header_image_layout);

        parentName.setText(insertDataItems().get(i).getParentName());

        if (insertDataItems().get(i).getChildDataItems() != null) {
            headerImageLayout.setVisibility(View.VISIBLE);
            headerImageLayout.setVisibility(View.VISIBLE);
            for (int j = 0; j < insertDataItems().get(i).getChildDataItems().size(); j++) {
                final LayoutInflater childInflater = LayoutInflater.from(this);
                final View childView = childInflater.inflate(R.layout.z_history_child_item, null, false);

                final TextView key = childView.findViewById(R.id.u_key);
                final TextView value = childView.findViewById(R.id.u_value);
                key.setText(insertDataItems().get(i).getChildDataItems().get(j).getKey());
                value.setText(insertDataItems().get(i).getChildDataItems().get(j).getValue());
                linearLayout_childItems.addView(childView);

            }
        } else {
            headerImageLayout.setVisibility(View.GONE);
            headerLayout.setBackgroundColor(Color.parseColor("#e8e8e8"));
        }
        linearLayout_childItems.setVisibility(View.GONE);

        if (insertDataItems().get(i).getParentName().length() > 0) {
            if (insertDataItems().get(i).isAllowDisable()) {
                headerImageView.setVisibility(View.GONE);
                linearLayout_childItems.setVisibility(View.VISIBLE);
            } else {
                headerImageView.setVisibility(View.VISIBLE);
                linearLayout_childItems.setVisibility(View.GONE);

            }


        } else {
            linearLayout_childItems.setVisibility(View.VISIBLE);
            headerLayout.setVisibility(View.GONE);
        }
        replaceLayout.post(() -> replaceLayout.addView(reView));

    }
}

我這樣稱呼這個功能

 runOnUiThread(() -> replaceCustomView());

自定義視圖添加成功,但是我的問題是第一次活動很慢。Android需要很多時間來添加視圖。我的自定義數組的大小為20。可以通過任何方式逐步添加視圖,而不是添加所有視圖每一次? 什么是最佳做法? 謝謝

當項目更多時,請不要使用添加運行時組件的概念。 這將使活動與視圖渲染邏輯共享內存,並且您將能夠回收視圖。 這種實現只能在有少量(可能是2到5)項時使用,並且由於UI的限制,無法通過recyclerview實現。

因此,請使用RecyclerView加載項目,並且可以使用在子項目中添加自定義項目的概念來實現此功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM