>

배워야 할 기본 안드로이드 앱을 만들고 있습니다. 아래에는 생성시 몇 가지 textViews를 만드는 주요 활동이 있습니다. 큰 코드 덩어리를 "Create Categories.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);
    }
}

카테고리 카테고리 .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;
    }

이를 수행하는 방법에 대한 유용한 조언은 대단히 감사하겠습니다.


  • 답변 # 1

    작업을 수행 할 클래스를 구현해야하며, 생성 한 클래스의 객체를 초기화하고 해당 클래스의 특정 함수를 호출하기 만하면됩니다. 토스트 나 다른 재료를 만들어야하는 경우 해당 함수에 컨텍스트를 전달하고 해당 함수에서 토스트를 만듭니다. 그러나 외부 클래스에서 도달하기 위해 공개 정적 컨텍스트를 정의해야한다는 것을 잊지 마십시오.

  • 답변 # 2

    코드를 "보다 체계적으로"구성하기는 쉽지만 읽기는 쉽지 않습니다. .

    원하는 작업을 수행하려면 기본 onCreate에서 호출 할 정적 함수가 포함 된 "라이브러리"클래스 (인스턴스화되지 않고 정적 메서드 만 포함)를 만들어야합니다. ArrayList, RelativeLayout 및 3 개의 TextView 배열처럼, 호출 클래스의 변수에 해당 변수를 할당하여 인스턴스화 한 후 해당 작업을 수행 할 수 있도록합니다 ...

    onCreate를 정리하고 싶다면, 같은 코드에서 원래 코드가있는 곳 근처에있는 다른 함수로 코드를 리팩터링해야합니다. 라이브러리 함수에서 생성 된 값의 출처입니다.

    실제로 코드를 정적 라이브러리 함수로 이동해야하는 유일한 시간은 둘 이상의 클래스에서 해당 코드에 두 번 이상 액세스해야하는 경우입니다.

관련 자료

  • 이전 python - pip install dotenv 오류 코드 1 Windows 10
  • 다음 python - django 템플릿에서 listview와 detailsview를 어떻게 연결합니까? 목록을 클릭하면 세부 정보가 표시됩니다