Как удалить определенные действия / действия из стека действий на основе какого-либо действия? - PullRequest
0 голосов
/ 10 декабря 2018

Я работаю над приложением, в котором мне нужно перейти к определенной деятельности, основанной на некоторых действиях.Вот изображение

enter image description here

Здесь мое первое действие - Чтение.На основании некоторых действий пользователь будет принят к NewProjectReadingActivity.Там у пользователя будет два варианта.

Вариант первыйВариант второй

В зависимости от параметров, выбранных пользователем, он / она будет перенаправлен в ReadingInputActivity.После получения входных данных от ReadInputActivity пользователь будет перенаправлен на ReadConfirmationActivity.Там будет три варианта

Вариант первыйВариант второйВариант третий

Если пользователь выберет первый вариант, он / она будет переведен в режим чтения данных, что очень просто.Я очищу стек и снова запустлю ReadActivity, и если он / она нажмет кнопку «Назад», приложение будет свернуто, что вполне нормально.Но если пользователь выберет второй вариант, он / она будет переведен в NewProjectReadingActivity. Если я очищу стек операций и снова запустлю NewProjectReadingActivity, то он запустит NewProjectReadingActivity, но проблема в том, что если пользователь нажмет кнопку «Назад», это минимизирует мойприложение, поскольку оно является единственным Activity, присутствующим в стеке действий.

Что я хочу, так это то, что если пользователь выберет второй вариант для ReadConfirmationActivity, то пользователь будет перенаправлен на NewReadingActivity, что означает, что я хочу удалить ReadingConfirmationActivity (который легко вызывается методом finish ()) и действиеначалось до этого действия i, e ReadingInputActivity.

Каждое упомянутое действие содержит фрагмент.Я предоставляю код активности ниже.

ReadingActivity

public class ReadingActivity extends BaseAppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if( savedInstanceState == null ) {
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, ReadingFragment.getInstance(), ReadingFragment.TAG).commit();
        }
        setDisplayHomeAsUpEnabled(true);
        setActionBarText(getString(R.string.new_project_reading));
    }

    @Override
    protected void setupContentView() {
        setContentView(R.layout.activity_reading);
    }

    public static Intent newIntent(Context context) {
        Intent intent = new Intent(context, ReadingActivity.class);
        return  intent;
    }
}

NewProjectReadingActivity

public class NewProjectReadingActivity extends BaseAppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if( savedInstanceState == null ) {
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, NewProjectReadingFragment.getInstance(), NewProjectReadingFragment.TAG).commit();
        }
        setDisplayHomeAsUpEnabled(true);
        setActionBarText(getString(R.string.new_project_reading));
    }

    @Override
    protected void setupContentView() {
        setContentView(R.layout.activity_new_project_reading);
    }

    public static Intent newIntent(Context context) {
        Intent intent = new Intent(context, NewProjectReadingActivity.class);
        return  intent;
    }
}

ReadingInputActivity

public class ReadingInputActivity extends BaseAppCompatActivity {

    private static final String EXTRA_VALUE_TYPE = "value_type";
    private int valueType = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        valueType = getIntent().getIntExtra(EXTRA_VALUE_TYPE, 0);
        if( savedInstanceState == null ) {
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, ReadingInputFragment.getInstance(valueType), ReadingInputFragment.TAG).commit();
        }
        setDisplayHomeAsUpEnabled(true);
        setActionBarText(getString(R.string.reading_input));
    }

    @Override
    protected void setupContentView() {
        setContentView(R.layout.activity_reading_input);
    }

    public static Intent newIntent(Context context, int valueType) {
        Intent intent = new Intent(context, ReadingInputActivity.class);
        intent.putExtra(EXTRA_VALUE_TYPE, valueType);
        return  intent;
    }
}

ReadingConfirmationActivity

public class ReadingConfirmationActivity   extends BaseAppCompatActivity {

    private static final String EXTRA_VALUE_TYPE = "value_type";
    private static final String EXTRA_READING_VALUE = "reading_value";
    private int valueType = 0;
    private double readingValue = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        valueType = getIntent().getIntExtra(EXTRA_VALUE_TYPE, 0);
        readingValue = getIntent().getDoubleExtra(EXTRA_READING_VALUE, 0);
        if( savedInstanceState == null ) {
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, ReadingConfirmationFragment.getInstance(valueType, readingValue), ReadingConfirmationFragment.TAG).commit();
        }
        setDisplayHomeAsUpEnabled(true);
        setActionBarText(getString(R.string.reading_input));
    }

    @Override
    protected void setupContentView() {
        setContentView(R.layout.activity_reading_confirmation);
    }

    public static Intent newIntent(Context context, int valueType, double readingValue) {
        Intent intent = new Intent(context, ReadingConfirmationActivity.class);
        intent.putExtra(EXTRA_VALUE_TYPE, valueType);
        intent.putExtra(EXTRA_READING_VALUE, readingValue);
        return  intent;
    }
}

1 Ответ

0 голосов
/ 11 декабря 2018

Вы писали:

То, что я хочу, это то, что если пользователь выберет второй вариант на ReadingConfirmationActivity, то пользователь будет переведен на NewReadingActivity, что означает, что я хочу удалить ReadingConfirmationActivity (это просто вызвать финиш ()) и действие, начатое до этого действия i, e ReadingInputActivity.

Чтобы сделать это, вы будете делать следующее, когда пользователь выбирает Вариант два вReadingConfirmationActivity:

Intent intent = new Intent(this, NewReadingActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

Это приведет к завершению всех действий сверху (включая) NewReadingActivity.Новый экземпляр NewReadingActivity будет создан и показан пользователю.Если вы хотите вернуться к существующему экземпляру NewReadingActivity, вы также можете сделать это, добавив Intent.FLAG_ACTIVITY_SINGLE_TOP к Intent.

...