Java - Как объединить методы работающие с Activity

227
11 апреля 2017, 09:09

Хочу упросить код, так как в нём повторяются элементы. Помогите это сделать.

Код:

package com.rgb;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class Launcher extends Activity {
    private int changeBlue = 1;
    private int changeGreen = 1;
    private int changeBlack = 1;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_launch);
        changeLabelBlue(changeBlue);
        changeLabelGreen(changeGreen);
        changeLabelBlack(changeBlack);
    }
    private void changeLabelBlue(int change) {
        Button firstButtonBlue = (Button) findViewById(R.id.firstBlue);
        Button secondButtonBlue = (Button) findViewById(R.id.secondBlue);
        Button thirdButtonBlue = (Button) findViewById(R.id.thirdBlue);
        firstButtonBlue.setText(String.valueOf(change));
        secondButtonBlue.setText(String.valueOf(change + 1));
        thirdButtonBlue.setText(String.valueOf(change + 2));
        changeAlphaBlueNext(0.5);
    }
    private void changeLabelGreen(int change) {
        Button firstButtonGreen = (Button) findViewById(R.id.firstGreen);
        Button secondButtonGreen = (Button) findViewById(R.id.secondGreen);
        Button thirdButtonGreen = (Button) findViewById(R.id.thirdGreen);
        firstButtonGreen.setText(String.valueOf(change));
        secondButtonGreen.setText(String.valueOf(change + 1));
        thirdButtonGreen.setText(String.valueOf(change + 2));
        changeAlphaGreenNext(0.5);
    }
    private void changeLabelBlack(int change) {
        Button firstButtonBlack = (Button) findViewById(R.id.firstBlack);
        Button secondButtonBlack = (Button) findViewById(R.id.secondBlack);
        Button thirdButtonBlack = (Button) findViewById(R.id.thirdBlack);
        firstButtonBlack.setText(String.valueOf(change));
        secondButtonBlack.setText(String.valueOf(change + 1));
        thirdButtonBlack.setText(String.valueOf(change + 2));
        changeAlphaBlackNext(0.5);
    }
    private void changeAlphaBlueNext(double change) {
        if (changeBlue + 2 == 20) {
            Button next = (Button) findViewById(R.id.buttonNextBlue);
            next.setAlpha((float) change);
        }
    }
    private void changeAlphaGreenNext(double change) {
        if (changeGreen + 2 == 20) {
            Button next = (Button) findViewById(R.id.buttonNextGreen);
            next.setAlpha((float) change);
        }
    }
    private void changeAlphaBlackNext(double change) {
        if (changeBlack + 2 == 20) {
            Button next = (Button) findViewById(R.id.buttonNextBlack);
            next.setAlpha((float) change);
        }
    }
    public void nextBlue(View view) {
        if (changeBlue < 19) {
            changeBlue++;
            changeLabelBlue(changeBlue);
        }
    }
    public void nextGreen(View view) {
        if (changeGreen < 19) {
            changeGreen++;
            changeLabelGreen(changeGreen);
        }
    }
    public void nextBlack(View view) {
        if (changeBlack < 19) {
            changeBlack++;
            changeLabelBlack(changeBlack);
        }
    }
    public void backBlue(View view) {
        if (changeBlue != 1) {
            changeBlue--;
            changeLabelBlue(changeBlue);
            changeAlphaBlueNext(1);
        }
    }
    public void backGreen(View view) {
        if (changeGreen != 1) {
            changeGreen--;
            changeLabelGreen(changeGreen);
            changeAlphaGreenNext(1);
        }
    }
    public void backBlack(View view) {
        if (changeBlack != 1) {
            changeBlack--;
            changeLabelBlack(changeBlack);
            changeAlphaBlackNext(1);
        }
    }
    // 1 lvl blue
    public void startIntroBlue(View view) {
        Intent intent = new Intent(Launcher.this, Tutorial.class);
        startActivity(intent);
        this.finish();
    }
}
Answer 1

Тут прежде всего упорядочить надо, все эти findViewById() должны быть непосредственно в onCreate единым блоком и все элементы храниться в полях, например:

Button button1;
Button button2;
Button button3;
initWidgets() {
  button1 = (Button)findViewById(...);
  button2 = (Button)findViewById(...);
  ...
}
onCreate() {
  super();
  ...
  initWidgets();
  ...
}

Все умные люди - Borland, Microsoft, создатели Qt, Swing - уже двадцать лет назад поняли, что это - необходимость, и их WYSIWYG'и автоматически генерируют такой код чтобы все элементы были доступны в полях и вообще не нужно было их вручную "извлекать", конечно бывают редкие случаи когда так делать не надо, но ничто не мешает в этих случаях просто закомментировать этот initWidget и сделать как нужно, а страдать из-за этого во всех остальных 99.9% случаев - это не гибкость, это глупость, мазохизм. Обработчики событий (listener'ы) "вешают" там же, кстати, где они у вас?

Насчет повторяющегося кода, в подробности не вдавался, XML не вижу, поэтому конкретное решение не назову, очевидно одно - здесь стоит применить динамическое создание Button и обработчиков для них (а из XML их "выкинуть", поэтому здесь с этими Button как раз тот случай, когда вышесказанное не подходит), может самому реализовать на базе какого-нибудь LinearLayout, может воспользоваться скажем ListView с Adapter, который по сути и предназначен для решения такой задачи.

READ ALSO
Получение ширины и высоты для JLabel

Получение ширины и высоты для JLabel

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

229
Установка фокуса на EditText. requestFocus не работает

Установка фокуса на EditText. requestFocus не работает

В xml у editText есть эти 2 атрибута:

317
Выполение 1 000 000 мелких заданий. Java

Выполение 1 000 000 мелких заданий. Java

Необходимо распределить работу на n часовВыполнять работу необходимо пачками

203
Вопрос про значение переменной в цикле

Вопрос про значение переменной в цикле

Есть кодНа выводе получается последовательное возведение 2 в степень (10 раз)

203