2016-06-24 1 views
2

私はプログラムで多くのedittextとtexviewを作成し、それらをtablelayoutに入れています。 これは私のコードスキップ148フレーム!アプリケーションは、メインスレッド、アンドロイドであまりにも多くの作業をしている可能性がありますか?

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が重い作業のために発生することがあります。 どうすれば滑らかにすることができますか?

+0

TableViewではなくRecyclerViewを使用する必要があるように聞こえます。 RecyclerViewは画面上に実際に表示されているビューのみを作成し、スクロールしながらビューを再作成します。あなたはこの大量の作業を避けています。 – Budius

+0

を参照してください.RxJavaを使用してすべてのビューを作成したり、RecyclerViewを使用することを検討してください。 –

答えて

-2

更新別々Uithread サンプルのご意見:あなたはあなたのケースで多くのあるあなたの意見を更新した場合

private void runThread() { 

new Thread() { 
    public void run() { 
     while (/*your condition*/) { 
      try { 
       runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         //update your views here 
        } 
       }); 

      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
}.start(); 
} 

は、メインスレッドがフレームとのANR

0
をスキップし、その結果多くの作業を行います

はオプション1

AsyncTaskを作成し、そこにすべての処理を行い、最終的にのonPostExecuteにレイアウト要素を設定します。さらに、AsyncTaskの実行中にProgressBarと表示し、onPostExecuteで却下することもできます。

AsyncTask documentationの字幕「The 4 steps」までスクロールして、この解決策をよりよく理解してください。

オプション2

XMLファイルを作成します(例えばmyTableRow.xml)、iterator integer iに依存しない、すなわちパラメータを共通パラメータのすべてを設定し、そのすべての子を持つあなたのTableRowを保持します。したがって、基本的にはすべてに共通するTableRowのテンプレートを作成しています。

はその後for Loopであなたが行うことに残っているすべては、次のとおりです、反復ごとにmyTableRow.xmlを膨らま残りのパラメータ(iに依存)を設定し、最後にtableLayoutに追加します。

注:すでに彼らはiに依存しているにもかかわらず、XMLファイル(つまり、あなたのTableRowテンプレート)にごEditTextビューetAgreedVolume[i]etAgreedSaleParty[i]etAgreedSalesMgr[i]を追加することが可能でなければなりません。私はあなたが単にEditTextのビューを作成し、TableRowを膨らませると、EditTextsを取得して配列に追加することができます。

「オプション2」はそのことをより速く、よりスムーズに実行することは保証できませんが、ほとんどの場合、ハードコードされたJavaを使用してレイアウトを作成するよりも高速です。

+0

@WISHY別のオプションで回答を更新しました – REG1

0

リストビューを使用してビューを作成する必要がありました。 Tablelayoutはこの膨大なデータを保持できません。

関連する問題

 関連する問題