Как разделить мой код на разные файлы и вызвать их в методе onCreate в Android

Я создаю базовое приложение для Android, чтобы учиться. ниже у меня есть основной вид деятельности, который создает несколько текстовых представлений при создании. Я пытаюсь очистить свой проект, помещая этот большой кусок кода в другой файл с именем "CreateCategories.java", а затем вызываю функцию, класс или что-то, что выполняет этот код. Как мне это сделать? ниже моя текущая программа

package com.company.practice;

import ...
.
.
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        RelativeLayout categoryLayout = findViewById(R.id.categoryContainer);

        ArrayList<Category> categories = new ArrayList<Category>();
        categories.add(new Category("rent", "0.35", "0.00"));
        categories.add(new Category("loan", "0.1", "0.00"));

        TextView[] catogoryTitleTextView = new TextView[categories.size()];
        TextView[] catogorypercentageTextView = new TextView[categories.size()];
        TextView[] catogoryAmountTextView = new TextView[categories.size()];
        for(int i =0; i < categories.size(); i++){
            //initialize textviews
            TextView title = new TextView(this);
            TextView percentage = new TextView(this);
            TextView amount = new TextView(this);

            //set text views text, id, and textsize
            title.setText(categories.get(i).title);
            //title.setTextSize(getResources().getDimension(R.dimen.textsize));
            title.setId(i + 100);
            percentage.setText(categories.get(i).percent);
            //percentage.setTextSize(getResources().getDimension(R.dimen.textsize));
            percentage.setId(i + 200);
            amount.setText(categories.get(i).amount);
            //amount.setTextSize(getResources().getDimension(R.dimen.textsize));
            amount.setId(i + 300);

            //set params for title textview
            RelativeLayout.LayoutParams titleParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
            titleParams.addRule(RelativeLayout.ALIGN_END, R.id.salaryCategoryTextVeiw);
            titleParams.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
            titleParams.width = RelativeLayout.LayoutParams.WRAP_CONTENT;

            if(i==0){
                //set params for title textview if it the first one. it sets below the textveiw catagory, and has more margin
                titleParams.addRule(RelativeLayout.BELOW, R.id.salaryCategoryTextVeiw);
                titleParams.topMargin = 27;
            } else {
                //this will look up the id of teh last category text view
                titleParams.addRule(RelativeLayout.BELOW, catogoryTitleTextView[i-1].getId());
                titleParams.topMargin = 15;
            }

            title.setLayoutParams(titleParams);
            //set params for percentage textview
            RelativeLayout.LayoutParams PercentParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
            PercentParams.addRule(RelativeLayout.ALIGN_START, R.id.salaryPercentTextVeiw);
            PercentParams.addRule(RelativeLayout.ALIGN_TOP, title.getId());
            PercentParams.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
            PercentParams.width = RelativeLayout.LayoutParams.WRAP_CONTENT;

            percentage.setLayoutParams(PercentParams);

            //set params for amount textview
            RelativeLayout.LayoutParams AmountParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
            AmountParams.addRule(RelativeLayout.ALIGN_START, R.id.salaryAmountTextVeiw);
            AmountParams.addRule(RelativeLayout.ALIGN_TOP, percentage.getId());
            AmountParams.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
            AmountParams.width = RelativeLayout.LayoutParams.WRAP_CONTENT;

            amount.setLayoutParams(AmountParams);

            //add text views to layout
            categoryLayout.addView(title);
            categoryLayout.addView(percentage);
            categoryLayout.addView(amount);


            //save the views within the arrays
            catogoryTitleTextView[i] = title;
            catogorypercentageTextView[i] = percentage;
            catogoryAmountTextView[i] = amount;
        }
    }
}

Я хотел бы, чтобы это выглядело примерно так: MainActivty.java

package com.company.practice;

import ...
.
.
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

CreateCategories.java

Function CreateCategories() {
    RelativeLayout categoryLayout = findViewById(R.id.categoryContainer);

    ArrayList<Category> categories = new ArrayList<Category>();
        categories.add(new Category("rent", "0.35", "0.00"));
        categories.add(new Category("loan", "0.1", "0.00"));

    TextView[] catogoryTitleTextView = new TextView[categories.size()];
    TextView[] catogorypercentageTextView = new TextView[categories.size()];
    TextView[] catogoryAmountTextView = new TextView[categories.size()];
        for(int i =0; i < categories.size(); i++){
        //initialize textviews
        TextView title = new TextView(this);
        TextView percentage = new TextView(this);
        TextView amount = new TextView(this);

        //set text views text, id, and textsize
        title.setText(categories.get(i).title);
        //title.setTextSize(getResources().getDimension(R.dimen.textsize));
        title.setId(i + 100);
        percentage.setText(categories.get(i).percent);
        //percentage.setTextSize(getResources().getDimension(R.dimen.textsize));
        percentage.setId(i + 200);
        amount.setText(categories.get(i).amount);
        //amount.setTextSize(getResources().getDimension(R.dimen.textsize));
        amount.setId(i + 300);

        //set params for title textview
        RelativeLayout.LayoutParams titleParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        titleParams.addRule(RelativeLayout.ALIGN_END, R.id.salaryCategoryTextVeiw);
        titleParams.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
        titleParams.width = RelativeLayout.LayoutParams.WRAP_CONTENT;

        if(i==0){
            //set params for title textview if it the first one. it sets below the textveiw catagory, and has more margin
            titleParams.addRule(RelativeLayout.BELOW, R.id.salaryCategoryTextVeiw);
            titleParams.topMargin = 27;
        } else {
            //this will look up the id of teh last category text view
            titleParams.addRule(RelativeLayout.BELOW, catogoryTitleTextView[i-1].getId());
            titleParams.topMargin = 15;
        }

        title.setLayoutParams(titleParams);
        //set params for percentage textview
        RelativeLayout.LayoutParams PercentParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        PercentParams.addRule(RelativeLayout.ALIGN_START, R.id.salaryPercentTextVeiw);
        PercentParams.addRule(RelativeLayout.ALIGN_TOP, title.getId());
        PercentParams.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
        PercentParams.width = RelativeLayout.LayoutParams.WRAP_CONTENT;

        percentage.setLayoutParams(PercentParams);

        //set params for amount textview
        RelativeLayout.LayoutParams AmountParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        AmountParams.addRule(RelativeLayout.ALIGN_START, R.id.salaryAmountTextVeiw);
        AmountParams.addRule(RelativeLayout.ALIGN_TOP, percentage.getId());
        AmountParams.height = RelativeLayout.LayoutParams.WRAP_CONTENT;
        AmountParams.width = RelativeLayout.LayoutParams.WRAP_CONTENT;

        amount.setLayoutParams(AmountParams);

        //add text views to layout
        categoryLayout.addView(title);
        categoryLayout.addView(percentage);
        categoryLayout.addView(amount);


        //save the views within the arrays
        catogoryTitleTextView[i] = title;
        catogorypercentageTextView[i] = percentage;
        catogoryAmountTextView[i] = amount;
    }

Любой полезный совет о том, как это сделать, будет принята с благодарностью.

2 ответа

Вам нужно будет реализовать класс, который будет выполнять работу, и все, что вам нужно сделать, это инициализировать объект класса, который вы создали, и вызвать определенную функцию этого класса. Если вам нужно создать несколько тостов или что-то еще, вы передадите контекст этой функции и сделаете тост в этой функции. Но не забывайте, что вы должны определить общедоступный статический контекст, чтобы достичь его из внешнего класса.

Вы делаете большую работу, чтобы сделать ваш код "более организованным", но гораздо менее читабельным.

Для того, чтобы делать то, что вы хотите, вам нужно создать класс "библиотека" (никогда не создаваемый, только статические методы), который содержит статическую функцию, которую вы вызываете из своего основного onCreate, возвращая ВСЕ, что вы каким-либо образом создали, который выглядит как ArrayList, массивы RelativeLayout и 3 TextView назначают их переменным в вашем вызывающем классе, чтобы вы могли работать с этими вещами после их создания...

Если вы хотите очистить свой onCreate, непременно реорганизуйте код в другую функцию того же класса, надеюсь, рядом с исходным кодом, чтобы вам не приходилось искать между двумя файлами, когда вы забыли, где находятся значения которые были созданы в вашей библиотечной функции.

Единственный раз, когда вы действительно должны переместить код в статическую библиотечную функцию, это если вам нужен доступ к этому коду более одного раза из более чем одного класса.

Другие вопросы по тегам