Как вывести действие на передний план, используя завершение из другого действия

у меня есть два вида деятельности: А и Б.

От а до б:

при создании

Context context = this;

по клику

Intent i = new Intent(context,B.class);
startActivity(i);

из B в A: (если B имеет кнопку для возврата в A)

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

Но если поток такой:

Звонок B, пользователь, который смотрит B, нажимает кнопку «Домой» и снова нажимает B из запущенных действий и нажимает кнопку, чтобы вызвать finish (), он переходит на «Домой», а не на мое первое действие A. Как я могу это сделать?

РЕДАКТИРОВАТЬ:

поток

  1. A->B // с startActivity(Intent);
  2. B->Home // нажатие кнопки «Домой» на устройстве
  3. Home->B // щелчок по моему приложению из запущенных действий
  4. B.finish() -> Home, а не A//finish или onBackPressed делают то же самое

person JackTurky    schedule 29.03.2013    source источник
comment
вы можете использовать одну задачу действия и использовать намерение для запуска действия, тогда только последний экземпляр будет выведен на передний план, если экземпляр существует (и при создании не будет выполняться)   -  person Athul Harikumar    schedule 29.03.2013
comment
это то, что я сделал ;)   -  person JackTurky    schedule 29.03.2013
comment
Является ли ваша деятельность одной задачей?   -  person Hoan Nguyen    schedule 29.03.2013
comment
да .. поэтому startActivity выведет эту активность на передний план вместо создания новой   -  person JackTurky    schedule 30.03.2013


Ответы (5)


Вы можете попробовать это: -

ПОЧЕМУ ВЫ ИСПОЛЬЗУЕТЕ getApplicationContext() вместо this или Activity A name.

А -> Б

 Intent i = new Intent(yourcurrentActivity,B.class);
 startActivty(i);

Б -> А

позвони finish()

обновите, если вы используете это: - удалите его

android:noHistory="true";
person Monty    schedule 29.03.2013
comment
я не хочу снова начинать свой класс A.. мне не нужно выполнять код внутри onCreate - person JackTurky; 29.03.2013
comment
ты хочешь вернуться домой или в FirstActivity после финиша() - person Monty; 29.03.2013
comment
FirstActivity.. но мне не нужно снова создавать FirstActivity, а просто вывести его на передний план, скрывая второй - person JackTurky; 29.03.2013
comment
никоим образом .. (см. редактирование) с myApplication вместо getApplicationContext() он идет домой, а не в firstActivity - person JackTurky; 29.03.2013
comment
android:noHistory=false в вашем файле манифеста в вашем первом действии или удалите это.... если вы его используете. - person Monty; 29.03.2013
comment
я решил просто: Intent i = new Intent(getActivity(),MyFirstClass.class); получить активность (). startActivity (я); получитьактивность().finish(); - person JackTurky; 29.03.2013
comment
вы использовали это ключевое слово или имя вашей активности вместо getApplicationContext.. попробуйте это один раз, потому что getActivity не очень хорошая идея. - person Monty; 29.03.2013
comment
это PreferenceFragment, мне нужно вызвать getActivity :) - person JackTurky; 29.03.2013

вызов

onBackPressed();

вместо

finish();
person Ercan    schedule 29.03.2013
comment
извините... но onBackPressed() делает то же, что и finish() -> A->B, B->Home,Home->B,(B.onBackPressed() || B.finish()) -> Home и не А - person JackTurky; 29.03.2013

Попробуй это:

public void startActivityForResult (Intent intent, int requestCode)
person stefan    schedule 29.03.2013
comment
При публикации кода в качестве ответа также объясните, почему и как он работает. - person Lukas Knuth; 31.03.2013

Попробуй это:

startActivity(new Intent(B.this,B.class));

и finish() в действии A как

// in your activity A
Intent i = new Intent(getApplicationContext(),B.class);
startActivity(i);
finish();

а также

public void OnBackPressed()
{
finish();
}
person Linga    schedule 29.03.2013
comment
я не хочу снова начинать класс - person JackTurky; 29.03.2013
comment
извините, но почему я должен выполнить finish() для действия A? - person JackTurky; 29.03.2013
comment
Вы говорите, что я не хочу снова начинать класс А. поэтому он завершит действие A. В противном случае, когда вы нажмете кнопку «Назад», он перейдет к действию A. - person Linga; 29.03.2013

проверьте код ниже: у меня есть 3 действия: MainActivity, A_Acvitiy, B_activty (надеюсь, это сработало в соответствии с вашим требованием..)

package com.example.androidtest;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public void callActivity(View v) {
        if (v.getId() == R.id.button1) {
            // A
            startActivity(new Intent(MainActivity.this, A_activity.class));
        }

        if (v.getId() == R.id.button2) {
            // B
            startActivity(new Intent(MainActivity.this, B_activity.class));
            if (GeneraClass.isFormB) {
                            GeneraClass.isFormB = false;
                finish();
            }
        }
    }
}

A_активность:

package com.example.androidtest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class A_activity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.a_layout);
    }

    public void callActivity(View v) {
        if (v.getId() == R.id.button1) {
            // B
            startActivity(new Intent(A_activity.this, B_activity.class));
                 finish();
        }

    }

}

б_активность:

package com.example.androidtest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class B_activity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.b_layout);
    }

    public void callActivity(View v) {
        if (v.getId() == R.id.home) {
            // home
            GeneraClass.isFormB = true;
            startActivity(new Intent(B_activity.this, MainActivity.class));
            finish();
        }

    }
}

мой дополнительный класс:

package com.example.androidtest;

public class GeneraClass {

    public static boolean isFormB = false;
}

Итак, Home-->A(finish)-->B--->Home(if from b then finish)-->B-->Back--> Home --->Back--> exit App

person Dhaval Parmar    schedule 29.03.2013