Ответ 1
почему бы вам не позвонить finish();
когда вы хотите вернуться в MainActivity
btnReturn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
finish();
}
});
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>
почему бы вам не позвонить finish();
когда вы хотите вернуться в MainActivity
btnReturn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
finish();
}
});
Вот почему вы увидели меню с кодом, указанным в методе 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);
}
)};
использовать
Intent returnBtn = new Intent(getApplicationContext(),
MainActivity.class);
startActivity(returnBtn);
сделать основной вид активности launchmode
до singleTask
в Android Manifest, если вы не хотите создавать новый каждый раз.
android:launchMode="singleTask"
Я использую его и отлично работал...
startActivity(new Intent(getApplicationContext(),MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
потому что Finish() используется для двух действий, а не для нескольких действий
вместо запуска MainActivity снова через startActivity, call finish() вместо этого в других действиях, чтобы вернуться в MainActivity... поскольку MainActivity уже находится в стеке
Я настоятельно рекомендую прочитать документы на флаге 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()
.
Это обычно также работает:)
navigateUpTo(new Intent(getBaseContext(), MainActivity.class));
Используйте этот код при нажатии кнопки в действии и, возвращаясь к другому действию, просто закончите предыдущую активность, установив флаг в намерении, затем поместите только одно действие в стек и уничтожьте предыдущий.
Intent i=new Intent("this","YourClassName.Class");
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);