Android, app with several checkbox areas. App laging because of heavy xml or code












0














My app is several checkboxes areas. On some event data from all checkboxes will be saved/sended/etc.



All worked, but this Activity loading about 7 seconds because my code is bad. So i need help in refactoring and optimize it.



How it looks in app:



img1



enter image description here



img2



enter image description here



So, i have 10(!) forms with ~ 100 checkboxes summary.
To draw it, i'm using 10 recyclers with 10 adaptes. Every adapter initialize with his own list and have own layout manager.



How to make this code good?



I can't pass all code, it's too large, so i give it apart.



To drow one recycler i use it(variable names changed):



//toolbar and questform
...
<RelativeLayout android:id="@+id/rv_wrapper1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/padding_default">

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:text="@string/title1"
android:textSize="@dimen/text_size_big" />

<ImageView
android:id="@+id/img_arrow_1"
android:layout_width="@dimen/image_size_small"
android:layout_height="@dimen/image_size_small"
android:layout_alignParentRight="true"
android:layout_marginEnd="@dimen/margin_default"
android:layout_marginRight="@dimen/margin_default"
android:src="@drawable/ic_expand" />


<com.github.chuross.library.ExpandableLayout
android:id="@+id/rv_expaner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/img_arrow_1"
app:exl_duration="1000">

<android.support.v7.widget.RecyclerView
android:id="@+id/rv_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/padding_small">
</android.support.v7.widget.RecyclerView>
</com.github.chuross.library.ExpandableLayout>
</RelativeLayout>
///another recycles


and i duplicate it 9 times on xml.



Activity



RecyclerView rv1 = findViewById(R.id.rv1);
RecyclerView rv2 = findViewById(R.id.rv2);
//another 8 RV.
...

rv1Adapter = new RVAdapter(this, initializList1(this));
rv2Adapter = new RVAdapter(this, initializList2(this));
//another 8 adapters
...

rv1.setAdapter(rv1Adapter);
rv2.setAdapter(rv2Adapter);
...
//another 8 setters

RecyclerView.LayoutManager layoutManagerForRv1 = new GridLayoutManager(this, 3);
RecyclerView.LayoutManager layoutManagerForRv2 = new GridLayoutManager(this, 3);
...
//another 8 managers


RelativeLayout rv1Expander = findViewById(R.id.rv_expander1);
RelativeLayout rv2Expander = findViewById(R.id.rv_expander2);
...
//another 8 RL

rv1Expander.setOnClickListener(new ExpanderLayoutHelper(R.id.rv_expander1));
rv2Expander.setOnClickListener(new ExpanderLayoutHelper(R.id.rv_expander2));
...
//another 8 listeners


ExpanderLayoutHelper - using for expand/collaps animation of RV.



public class ExpanderLayoutHelper implements View.OnClickListener {
RelativeLayout expandWrapper;
ImageView arrow;
ExpandableLayout expandableLayout;

ExpanderLayoutHelper(int relativeLayoutId) {
this.expandWrapper = findViewById(relativeLayoutId);
this.arrow = (ImageView) expandWrapper.getChildAt(1);
this.expandableLayout = (ExpandableLayout) expandWrapper.getChildAt(2);
}

@Override
public void onClick(View v) {
if (expandableLayout.isCollapsed()) {
expandableLayout.expand();
expandWrapper.getChildAt(1).animate().rotation(90f).setDuration(1000);
} else {
expandableLayout.collapse();
arrow.animate().rotation(0).setDuration(1000);
}
}
}


Another points will be here if i remember something important.



1) initializeList() is just 1-20 list.add("something") operation. For every form i have uniq list, so i have 10 initialize methods now.










share|improve this question





























    0














    My app is several checkboxes areas. On some event data from all checkboxes will be saved/sended/etc.



    All worked, but this Activity loading about 7 seconds because my code is bad. So i need help in refactoring and optimize it.



    How it looks in app:



    img1



    enter image description here



    img2



    enter image description here



    So, i have 10(!) forms with ~ 100 checkboxes summary.
    To draw it, i'm using 10 recyclers with 10 adaptes. Every adapter initialize with his own list and have own layout manager.



    How to make this code good?



    I can't pass all code, it's too large, so i give it apart.



    To drow one recycler i use it(variable names changed):



    //toolbar and questform
    ...
    <RelativeLayout android:id="@+id/rv_wrapper1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="@dimen/padding_default">

    <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_alignParentLeft="true"
    android:text="@string/title1"
    android:textSize="@dimen/text_size_big" />

    <ImageView
    android:id="@+id/img_arrow_1"
    android:layout_width="@dimen/image_size_small"
    android:layout_height="@dimen/image_size_small"
    android:layout_alignParentRight="true"
    android:layout_marginEnd="@dimen/margin_default"
    android:layout_marginRight="@dimen/margin_default"
    android:src="@drawable/ic_expand" />


    <com.github.chuross.library.ExpandableLayout
    android:id="@+id/rv_expaner1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/img_arrow_1"
    app:exl_duration="1000">

    <android.support.v7.widget.RecyclerView
    android:id="@+id/rv_1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/padding_small">
    </android.support.v7.widget.RecyclerView>
    </com.github.chuross.library.ExpandableLayout>
    </RelativeLayout>
    ///another recycles


    and i duplicate it 9 times on xml.



    Activity



    RecyclerView rv1 = findViewById(R.id.rv1);
    RecyclerView rv2 = findViewById(R.id.rv2);
    //another 8 RV.
    ...

    rv1Adapter = new RVAdapter(this, initializList1(this));
    rv2Adapter = new RVAdapter(this, initializList2(this));
    //another 8 adapters
    ...

    rv1.setAdapter(rv1Adapter);
    rv2.setAdapter(rv2Adapter);
    ...
    //another 8 setters

    RecyclerView.LayoutManager layoutManagerForRv1 = new GridLayoutManager(this, 3);
    RecyclerView.LayoutManager layoutManagerForRv2 = new GridLayoutManager(this, 3);
    ...
    //another 8 managers


    RelativeLayout rv1Expander = findViewById(R.id.rv_expander1);
    RelativeLayout rv2Expander = findViewById(R.id.rv_expander2);
    ...
    //another 8 RL

    rv1Expander.setOnClickListener(new ExpanderLayoutHelper(R.id.rv_expander1));
    rv2Expander.setOnClickListener(new ExpanderLayoutHelper(R.id.rv_expander2));
    ...
    //another 8 listeners


    ExpanderLayoutHelper - using for expand/collaps animation of RV.



    public class ExpanderLayoutHelper implements View.OnClickListener {
    RelativeLayout expandWrapper;
    ImageView arrow;
    ExpandableLayout expandableLayout;

    ExpanderLayoutHelper(int relativeLayoutId) {
    this.expandWrapper = findViewById(relativeLayoutId);
    this.arrow = (ImageView) expandWrapper.getChildAt(1);
    this.expandableLayout = (ExpandableLayout) expandWrapper.getChildAt(2);
    }

    @Override
    public void onClick(View v) {
    if (expandableLayout.isCollapsed()) {
    expandableLayout.expand();
    expandWrapper.getChildAt(1).animate().rotation(90f).setDuration(1000);
    } else {
    expandableLayout.collapse();
    arrow.animate().rotation(0).setDuration(1000);
    }
    }
    }


    Another points will be here if i remember something important.



    1) initializeList() is just 1-20 list.add("something") operation. For every form i have uniq list, so i have 10 initialize methods now.










    share|improve this question



























      0












      0








      0







      My app is several checkboxes areas. On some event data from all checkboxes will be saved/sended/etc.



      All worked, but this Activity loading about 7 seconds because my code is bad. So i need help in refactoring and optimize it.



      How it looks in app:



      img1



      enter image description here



      img2



      enter image description here



      So, i have 10(!) forms with ~ 100 checkboxes summary.
      To draw it, i'm using 10 recyclers with 10 adaptes. Every adapter initialize with his own list and have own layout manager.



      How to make this code good?



      I can't pass all code, it's too large, so i give it apart.



      To drow one recycler i use it(variable names changed):



      //toolbar and questform
      ...
      <RelativeLayout android:id="@+id/rv_wrapper1"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:padding="@dimen/padding_default">

      <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_alignParentStart="true"
      android:layout_alignParentLeft="true"
      android:text="@string/title1"
      android:textSize="@dimen/text_size_big" />

      <ImageView
      android:id="@+id/img_arrow_1"
      android:layout_width="@dimen/image_size_small"
      android:layout_height="@dimen/image_size_small"
      android:layout_alignParentRight="true"
      android:layout_marginEnd="@dimen/margin_default"
      android:layout_marginRight="@dimen/margin_default"
      android:src="@drawable/ic_expand" />


      <com.github.chuross.library.ExpandableLayout
      android:id="@+id/rv_expaner1"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_below="@id/img_arrow_1"
      app:exl_duration="1000">

      <android.support.v7.widget.RecyclerView
      android:id="@+id/rv_1"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_marginTop="@dimen/padding_small">
      </android.support.v7.widget.RecyclerView>
      </com.github.chuross.library.ExpandableLayout>
      </RelativeLayout>
      ///another recycles


      and i duplicate it 9 times on xml.



      Activity



      RecyclerView rv1 = findViewById(R.id.rv1);
      RecyclerView rv2 = findViewById(R.id.rv2);
      //another 8 RV.
      ...

      rv1Adapter = new RVAdapter(this, initializList1(this));
      rv2Adapter = new RVAdapter(this, initializList2(this));
      //another 8 adapters
      ...

      rv1.setAdapter(rv1Adapter);
      rv2.setAdapter(rv2Adapter);
      ...
      //another 8 setters

      RecyclerView.LayoutManager layoutManagerForRv1 = new GridLayoutManager(this, 3);
      RecyclerView.LayoutManager layoutManagerForRv2 = new GridLayoutManager(this, 3);
      ...
      //another 8 managers


      RelativeLayout rv1Expander = findViewById(R.id.rv_expander1);
      RelativeLayout rv2Expander = findViewById(R.id.rv_expander2);
      ...
      //another 8 RL

      rv1Expander.setOnClickListener(new ExpanderLayoutHelper(R.id.rv_expander1));
      rv2Expander.setOnClickListener(new ExpanderLayoutHelper(R.id.rv_expander2));
      ...
      //another 8 listeners


      ExpanderLayoutHelper - using for expand/collaps animation of RV.



      public class ExpanderLayoutHelper implements View.OnClickListener {
      RelativeLayout expandWrapper;
      ImageView arrow;
      ExpandableLayout expandableLayout;

      ExpanderLayoutHelper(int relativeLayoutId) {
      this.expandWrapper = findViewById(relativeLayoutId);
      this.arrow = (ImageView) expandWrapper.getChildAt(1);
      this.expandableLayout = (ExpandableLayout) expandWrapper.getChildAt(2);
      }

      @Override
      public void onClick(View v) {
      if (expandableLayout.isCollapsed()) {
      expandableLayout.expand();
      expandWrapper.getChildAt(1).animate().rotation(90f).setDuration(1000);
      } else {
      expandableLayout.collapse();
      arrow.animate().rotation(0).setDuration(1000);
      }
      }
      }


      Another points will be here if i remember something important.



      1) initializeList() is just 1-20 list.add("something") operation. For every form i have uniq list, so i have 10 initialize methods now.










      share|improve this question















      My app is several checkboxes areas. On some event data from all checkboxes will be saved/sended/etc.



      All worked, but this Activity loading about 7 seconds because my code is bad. So i need help in refactoring and optimize it.



      How it looks in app:



      img1



      enter image description here



      img2



      enter image description here



      So, i have 10(!) forms with ~ 100 checkboxes summary.
      To draw it, i'm using 10 recyclers with 10 adaptes. Every adapter initialize with his own list and have own layout manager.



      How to make this code good?



      I can't pass all code, it's too large, so i give it apart.



      To drow one recycler i use it(variable names changed):



      //toolbar and questform
      ...
      <RelativeLayout android:id="@+id/rv_wrapper1"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:padding="@dimen/padding_default">

      <TextView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_alignParentStart="true"
      android:layout_alignParentLeft="true"
      android:text="@string/title1"
      android:textSize="@dimen/text_size_big" />

      <ImageView
      android:id="@+id/img_arrow_1"
      android:layout_width="@dimen/image_size_small"
      android:layout_height="@dimen/image_size_small"
      android:layout_alignParentRight="true"
      android:layout_marginEnd="@dimen/margin_default"
      android:layout_marginRight="@dimen/margin_default"
      android:src="@drawable/ic_expand" />


      <com.github.chuross.library.ExpandableLayout
      android:id="@+id/rv_expaner1"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_below="@id/img_arrow_1"
      app:exl_duration="1000">

      <android.support.v7.widget.RecyclerView
      android:id="@+id/rv_1"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_marginTop="@dimen/padding_small">
      </android.support.v7.widget.RecyclerView>
      </com.github.chuross.library.ExpandableLayout>
      </RelativeLayout>
      ///another recycles


      and i duplicate it 9 times on xml.



      Activity



      RecyclerView rv1 = findViewById(R.id.rv1);
      RecyclerView rv2 = findViewById(R.id.rv2);
      //another 8 RV.
      ...

      rv1Adapter = new RVAdapter(this, initializList1(this));
      rv2Adapter = new RVAdapter(this, initializList2(this));
      //another 8 adapters
      ...

      rv1.setAdapter(rv1Adapter);
      rv2.setAdapter(rv2Adapter);
      ...
      //another 8 setters

      RecyclerView.LayoutManager layoutManagerForRv1 = new GridLayoutManager(this, 3);
      RecyclerView.LayoutManager layoutManagerForRv2 = new GridLayoutManager(this, 3);
      ...
      //another 8 managers


      RelativeLayout rv1Expander = findViewById(R.id.rv_expander1);
      RelativeLayout rv2Expander = findViewById(R.id.rv_expander2);
      ...
      //another 8 RL

      rv1Expander.setOnClickListener(new ExpanderLayoutHelper(R.id.rv_expander1));
      rv2Expander.setOnClickListener(new ExpanderLayoutHelper(R.id.rv_expander2));
      ...
      //another 8 listeners


      ExpanderLayoutHelper - using for expand/collaps animation of RV.



      public class ExpanderLayoutHelper implements View.OnClickListener {
      RelativeLayout expandWrapper;
      ImageView arrow;
      ExpandableLayout expandableLayout;

      ExpanderLayoutHelper(int relativeLayoutId) {
      this.expandWrapper = findViewById(relativeLayoutId);
      this.arrow = (ImageView) expandWrapper.getChildAt(1);
      this.expandableLayout = (ExpandableLayout) expandWrapper.getChildAt(2);
      }

      @Override
      public void onClick(View v) {
      if (expandableLayout.isCollapsed()) {
      expandableLayout.expand();
      expandWrapper.getChildAt(1).animate().rotation(90f).setDuration(1000);
      } else {
      expandableLayout.collapse();
      arrow.animate().rotation(0).setDuration(1000);
      }
      }
      }


      Another points will be here if i remember something important.



      1) initializeList() is just 1-20 list.add("something") operation. For every form i have uniq list, so i have 10 initialize methods now.







      performance android xml






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 11 mins ago

























      asked 17 mins ago









      KirstenLy

      514




      514



























          active

          oldest

          votes











          Your Answer





          StackExchange.ifUsing("editor", function () {
          return StackExchange.using("mathjaxEditing", function () {
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          });
          });
          }, "mathjax-editing");

          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "196"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f210541%2fandroid-app-with-several-checkbox-areas-app-laging-because-of-heavy-xml-or-cod%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown






























          active

          oldest

          votes













          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f210541%2fandroid-app-with-several-checkbox-areas-app-laging-because-of-heavy-xml-or-cod%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          404 Error Contact Form 7 ajax form submitting

          How to know if a Active Directory user can login interactively

          TypeError: fit_transform() missing 1 required positional argument: 'X'