Я создаю много edittext и texviews программно и помещаю их в tablelayout. Это мой кодПропущено 148 кадров! Приложение может делать слишком много работы над своей основной нитью, Android?
private EditText[] etAgreedVolume, etAgreedSaleParty, etAgreedSalesMgr;
private void createOrderTable(ArrayList<POJOOrder> orderList) {
etAgreedVolume = new EditText[orderList.size()];
etAgreedSaleParty = new EditText[orderList.size()];
etAgreedSalesMgr = new EditText[orderList.size()];
int maxLength = 3;
InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(maxLength);
for (int i = 0; i < orderList.size(); i++) {
TableRow tableRow = new TableRow(getActivity());
tableRow.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT));
TextView tvItem = new TextView(getActivity());
tvItem.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.MATCH_PARENT));
tvItem.setText(orderList.get(i).getBrandWith_SKU());
tvItem.setTextColor(Color.parseColor("#2E3B41"));
tvItem.setGravity(Gravity.CENTER);
tvItem.setPadding(10, 10, 10, 10);
tvItem.setBackgroundResource(R.drawable.rectangle_grey);
TextView tvPlannedVolume = new TextView(getActivity());
tvPlannedVolume.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.MATCH_PARENT));
tvPlannedVolume.setText(orderList.get(i).getPlannedVolume() + " CS");
tvPlannedVolume.setTextColor(Color.parseColor("#2E3B41"));
tvPlannedVolume.setGravity(Gravity.CENTER);
tvPlannedVolume.setPadding(10, 10, 10, 10);
tvPlannedVolume.setBackgroundResource(R.drawable.rectangle_grey);
LinearLayout linearLayout1 = new LinearLayout(getActivity());
linearLayout1.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT));
linearLayout1.setOrientation(LinearLayout.HORIZONTAL);
TextView tvPlannedSalesParty = new TextView(getActivity());
tvPlannedSalesParty.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT, 1f));
tvPlannedSalesParty.setText(orderList.get(i).getPlannedSalesPromoParty() + "");
tvPlannedSalesParty.setTextColor(Color.parseColor("#2E3B41"));
tvPlannedSalesParty.setGravity(Gravity.CENTER);
tvPlannedSalesParty.setPadding(10, 10, 10, 10);
tvPlannedSalesParty.setBackgroundResource(R.drawable.rectangle_grey);
TextView tvPlannedSalesMgr = new TextView(getActivity());
tvPlannedSalesMgr.setLayoutParams(new TableRow.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT, 1f));
tvPlannedSalesMgr.setText(orderList.get(i).getPlannedSalesPromoMgr() + "");
tvPlannedSalesMgr.setTextColor(Color.parseColor("#2E3B41"));
tvPlannedSalesMgr.setGravity(Gravity.CENTER);
tvPlannedSalesMgr.setPadding(10, 10, 10, 10);
tvPlannedSalesMgr.setBackgroundResource(R.drawable.rectangle_grey);
linearLayout1.addView(tvPlannedSalesParty);
linearLayout1.addView(tvPlannedSalesMgr);
etAgreedVolume[i] = new EditText(getActivity());
etAgreedVolume[i].setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.MATCH_PARENT));
etAgreedVolume[i].setTextColor(ContextCompat.getColor(getActivity(), android.R.color.black));
etAgreedVolume[i].setGravity(Gravity.CENTER);
etAgreedVolume[i].setHintTextColor(Color.parseColor("#888888"));
etAgreedVolume[i].setHint("0");
etAgreedVolume[i].setPadding(10, 10, 10, 10);
etAgreedVolume[i].setBackgroundResource(R.drawable.rectangle_grey);
etAgreedVolume[i].setInputType(InputType.TYPE_CLASS_NUMBER);
etAgreedVolume[i].addTextChangedListener(watcherAgreedVolume);
etAgreedVolume[i].setFilters(FilterArray);
LinearLayout linearLayout2 = new LinearLayout(getActivity());
linearLayout2.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT));
linearLayout2.setOrientation(LinearLayout.HORIZONTAL);
etAgreedSaleParty[i] = new EditText(getActivity());
etAgreedSaleParty[i].setLayoutParams(new TableRow.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT, 1f));
etAgreedSaleParty[i].setTextColor(ContextCompat.getColor(getActivity(), android.R.color.black));
etAgreedSaleParty[i].setGravity(Gravity.CENTER);
etAgreedSaleParty[i].setHintTextColor(Color.parseColor("#888888"));
etAgreedSaleParty[i].setHint("0");
etAgreedSaleParty[i].setPadding(10, 10, 10, 10);
etAgreedSaleParty[i].setBackgroundResource(R.drawable.rectangle_grey);
etAgreedSaleParty[i].setInputType(InputType.TYPE_CLASS_NUMBER);
etAgreedSaleParty[i].addTextChangedListener(watcherAgreedVolume);
etAgreedSaleParty[i].setFilters(FilterArray);
etAgreedSalesMgr[i] = new EditText(getActivity());
etAgreedSalesMgr[i].setLayoutParams(new TableRow.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT, 1f));
etAgreedSalesMgr[i].setTextColor(ContextCompat.getColor(getActivity(), android.R.color.black));
etAgreedSalesMgr[i].setGravity(Gravity.CENTER);
etAgreedSalesMgr[i].setPadding(10, 10, 10, 10);
etAgreedSalesMgr[i].setHintTextColor(Color.parseColor("#888888"));
etAgreedSalesMgr[i].setHint("0");
etAgreedSalesMgr[i].setBackgroundResource(R.drawable.rectangle_grey);
etAgreedSalesMgr[i].setInputType(InputType.TYPE_CLASS_NUMBER);
etAgreedSalesMgr[i].addTextChangedListener(watcherAgreedVolume);
etAgreedSalesMgr[i].setFilters(FilterArray);
linearLayout2.addView(etAgreedSaleParty[i]);
linearLayout2.addView(etAgreedSalesMgr[i]);
tableRow.addView(tvItem);
tableRow.addView(tvPlannedVolume);
tableRow.addView(linearLayout1);
tableRow.addView(etAgreedVolume[i]);
tableRow.addView(linearLayout2);
tableLayout.addView(tableRow);
}
}
Эта страница мое приложение становится слишком медленным. Иногда даже ANR происходит из-за тяжелой работы. Как я могу сделать его гладким.
Мне кажется, что вы должны использовать RecyclerView вместо TableView. RecyclerView будет создавать только те виды, которые отображаются на экране, и, прокручивая их, перерабатывает их. Вы избегаете этого огромного количества работы, см. – Budius
, рассматривая использование RxJava для создания всех видов или использования RecyclerView. –