Как разделить мой код на разные файлы и вызвать их в методе 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, непременно реорганизуйте код в другую функцию того же класса, надеюсь, рядом с исходным кодом, чтобы вам не приходилось искать между двумя файлами, когда вы забыли, где находятся значения которые были созданы в вашей библиотечной функции.
Единственный раз, когда вы действительно должны переместить код в статическую библиотечную функцию, это если вам нужен доступ к этому коду более одного раза из более чем одного класса.