Подтвердить что ты не робот

Вернитесь обратно в MainActivity из другого действия

MainActivity содержит несколько кнопок. Каждая кнопка открывает новое действие с помощью намерения. Затем эти действия имеют кнопку, чтобы вернуться к MainActivity с помощью намерения.

Но когда я нажимаю кнопку, чтобы вернуться к MainActivity, я получаю какое-то меню на экране! Кто-то, кто знает, что может быть неправильным? Предоставьте некоторую помощь! Спасибо!

EDIT: кнопка возврата в одном из других действий:

Button btnReturn1 = (Button) findViewById(R.id.btnReturn1);
btnReturn1.setOnClickListener(new View.OnClickListener() {      
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent returnBtn = new Intent("android.intent.action.MAIN");
        startActivity(returnBtn);
    }
});

Манифест:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kullaberg.test02"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="15" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".Activity1"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.ACTIVITY001" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".Activity2"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.ACTIVITY002" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name=".Activity3"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.ACTIVITY003" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
</application>

4b9b3361

Ответ 1

почему бы вам не позвонить finish();

когда вы хотите вернуться в MainActivity

   btnReturn1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        finish();
    }
});

Ответ 2

Вот почему вы увидели меню с кодом, указанным в методе onClick:

Вы создавали Intent с конструктором, который берет строку для параметра действия Intent IntentFilter. Вы передали "android.intent.action.MAIN" в качестве аргумента этому конструктору, который указывает, что Intent может быть удовлетворен любым Activity с помощью IntentFilter, включая <action="android.intent.action.MAIN">.

Когда вы вызвали startActivity с этим Intent, вы фактически сказали операционной системе Android, чтобы найти Activity (в любом приложении, установленном в системе), в котором указано действие android.intent.action.MAIN. Когда есть несколько действий, которые подходят (и в этом случае, поскольку каждое приложение будет иметь основной Activity с IntentFilter, включая действие "android.intent.action.MAIN"), ОС представляет меню, позволяющее пользователю выбрать, какое приложение использовать.

Что касается вопроса о том, как вернуться к основной деятельности, как и в большинстве случаев, это зависит от специфики вашего приложения. Хотя принятый ответ, вероятно, работал в вашем случае, я не думаю, что это лучшее решение, и это, вероятно, побуждает вас использовать неидиоматический интерфейс в вашем приложении для Android. Если ваш метод Button onClick() содержит только вызов finish(), то скорее всего вы удалите Button из пользовательского интерфейса и просто позвольте пользователю нажать кнопку возврата к аппаратной/программной части, которая имеет одинаковую функциональность и идиоматический для Android. (Вы часто увидите обратные кнопки, используемые для эмуляции поведения iOS UINavigationController navigationBar, который не рекомендуется в приложениях для Android).

Если ваше основное действие запускает стек Деяний и вы хотите предоставить простой способ вернуться к основному виду деятельности, не нажимая повторно кнопку повторно, то вы хотите вызвать startActivity после установки флага Intent.FLAG_ACTIVITY_CLEAR_TOP, который закроет все действия в стеке вызовов, которые превышают ваш основной вид деятельности и доводят ваше основное действие до вершины стека вызовов. См. Ниже (если ваш основной подкласс активности называется MainActivity:

btnReturn1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Intent i=new Intent(this, MainActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(i);
    }
)};

Ответ 3

использовать

Intent returnBtn = new Intent(getApplicationContext(),
                    MainActivity.class);

startActivity(returnBtn);

сделать основной вид активности launchmode до singleTask в Android Manifest, если вы не хотите создавать новый каждый раз.

android:launchMode="singleTask" 

Ответ 4

Я использую его и отлично работал...

startActivity(new Intent(getApplicationContext(),MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 

потому что Finish() используется для двух действий, а не для нескольких действий

Ответ 5

вместо запуска MainActivity снова через startActivity, call finish() вместо этого в других действиях, чтобы вернуться в MainActivity... поскольку MainActivity уже находится в стеке

Ответ 6

Я настоятельно рекомендую прочитать документы на флаге Intent.FLAG_ACTIVITY_CLEAR_TOP. Используя его, не обязательно вернется полностью к первому (main). Флаг будет удалять все существующие действия только с классом активности, указанным в Intent. Это хорошо объясняется в документах:

For example, consider a task consisting of the activities: A, B, C, D.
If D calls startActivity() with an Intent that resolves to the component of
activity B, then C and D will be finished and B receive the given Intent, 
resulting in the stack now being: A, B.

Обратите внимание, что действие может быть перенесено на передний план (т.е. очистить все остальные действия поверх него), а затем снова перезапустить или вызвать метод onNewIntent().

Источник

Ответ 7

Это обычно также работает:)

navigateUpTo(new Intent(getBaseContext(), MainActivity.class));

Ответ 8

Используйте этот код при нажатии кнопки в действии и, возвращаясь к другому действию, просто закончите предыдущую активность, установив флаг в намерении, затем поместите только одно действие в стек и уничтожьте предыдущий.

  Intent i=new Intent("this","YourClassName.Class");
  i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  startActivity(i);