Как убрать дублирующийся код в разных действиях? - PullRequest
0 голосов
/ 12 октября 2019

У меня есть задание из моего кабинета. Я должен начать деятельность явно в соответствии с выбранным переключателем. Например, у нас есть два вида деятельности для выбора и основной вид деятельности. Выбираем переключатель и запускаем активность. Но это второстепенные действия одинаковы. Задача не говорит, как бороться с той же деятельностью. Мне интересно, как избежать такого рода дублирования кода. Без изменения задания.

public class DisplayOneActivity extends AppCompatActivity {

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

    TextView textView = findViewById(R.id.textView);
    textView.setText(getIntent().getStringExtra(KEY_TEXT));
    textView.setTextColor(getIntent().getIntExtra(KEY_COLOR, Color.RED));

    if (getIntent().getBooleanExtra(KEY_RANDOM_ALIGN, false)){
        Random rnd = new Random(System.currentTimeMillis());
        textView.setTextAlignment(TEXT_ALIGN[rnd.nextInt(TEXT_ALIGN.length)]);
    }

}
}

public class DisplayTwoActivity extends AppCompatActivity {

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

    TextView textView = findViewById(R.id.textView);
    textView.setText(getIntent().getStringExtra(KEY_TEXT));
    textView.setTextColor(getIntent().getIntExtra(KEY_COLOR, Color.RED));

    if (getIntent().getBooleanExtra(KEY_RANDOM_ALIGN, false)){
        Random rnd = new Random(System.currentTimeMillis());
        textView.setTextAlignment(TEXT_ALIGN[rnd.nextInt(TEXT_ALIGN.length)]);
    }

}
}

Ответы [ 3 ]

0 голосов
/ 12 октября 2019

вы можете создать вызов baseActivity и расширить свои активности из этого базового действия.

например, вы создали этот базовый класс:

public class BaseActivity extends AppCompatActivity { }

и ваш класс:

public class DisplayOneActivity extends BaseActivity {}
public class DisplayTwoActivity extends BaseActivity {}

теперь вы можете поместить общие коды и методы в базовое действие и использовать его во всех дочерних действиях.

0 голосов
/ 13 октября 2019

Я удалил один из классов. Добавлены switch-case, которые выбирают layout.xml в соответствии с переключателем.

0 голосов
/ 12 октября 2019

Вы можете создать BaseActivity с одним и тем же концом кода, расширить DisplayOneActivity и DisplayTwoActivity с BaseActivity.

public class BaseDisplayActivity extends AppCompatActivity {

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

    TextView textView = findViewById(R.id.textView);
    textView.setText(getIntent().getStringExtra(KEY_TEXT));
    textView.setTextColor(getIntent().getIntExtra(KEY_COLOR, Color.RED));

    if (getIntent().getBooleanExtra(KEY_RANDOM_ALIGN, false)){
        Random rnd = new Random(System.currentTimeMillis());
        textView.setTextAlignment(TEXT_ALIGN[rnd.nextInt(TEXT_ALIGN.length)]);
    }
}

, а затем просто расширить два других действия.

public class DisplayOneActivity extends BaseDisplayActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}
}


public class DisplayTwoActivity extends BaseDisplayActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}
}
...