[英]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.