Приложение Android не закрывается при нажатии кнопки «Назад» - PullRequest
0 голосов
/ 11 января 2012

Я новичок в программировании на Android и написал приложение, реализующее только метод Activity.OnCreate. Я ожидал вернуться к предыдущему виду (который должен быть домашним экраном из-за имеющегося у меня базового фильтра намерений), нажав кнопку НАЗАД, но это не так. Мне удалось сделать это только нажатием кнопки HOME. (Я протестировал свое приложение на нескольких устройствах, и оно ведет себя одинаково.) У всех остальных возникла такая же проблема? Каково решение? (git репо моего приложения здесь: https://github.com/falcondai/android_lab1)

Ниже приведена операция, которую я не смог правильно отменить (клавиша BACK отлично работает для всех других операций):

public class NameGetterActivity extends Activity 
{
    private static final String TAG = "NameGetterActivity";

    private EditText name_fld;
    private Button submit_btn;
    private Button test_btn;

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.name_getter);

        name_fld = (EditText)this.findViewById(R.id.editText1);
        submit_btn = (Button)this.findViewById(R.id.button1);
        test_btn = (Button)this.findViewById(R.id.button2);

        submit_btn.setOnClickListener(
                new OnClickListener() {
                    public void onClick(View v) {
                        Log.d(TAG, name_fld.getText().toString());

                        Intent i = new Intent(NameGetterActivity.this, HelloWorldActivity.class);
                        i.putExtra("name", name_fld.getText().toString());
                        startActivity(i);
                    }
                }
            );

        test_btn.setOnClickListener(
                new OnClickListener() {
                    public void onClick(View v) {
                        Log.d(TAG, "sensor activity button pressed");

                        Intent i = new Intent(NameGetterActivity.this, SensorActivity.class);
                        startActivity(i);
                    }
                }
            );
    }

}

Ответы [ 5 ]

2 голосов
/ 11 января 2012

XML-файл layerout использует MediaController в качестве корневого макета, замените его на LinearLayout

0 голосов
/ 11 января 2012

Я не понимаю вашу проблему ясно, но здесь, возможно, некоторые советы, полезные для вас. Во-первых, сделайте launchMode = "SingleTask" вашей HomeActivity в manifest.xml, это сделает вашу HomeActivity только одним экземпляром.

Второй , я полагаю, что вы просто хотите получить некоторую информацию (например, имя) для использования HomeActivity, поэтому попробуйте метод startActivityForResult (); , а затем вернитесь по вызову setResult (Намерение); finish (); в вашей NameGetterActivity и обрабатывают информацию в onActivityResult () в HomeActivity (реализуйте этот метод так же, как onCreate onStart ...).

(я думаю, что, возможно, ваша ситуация похожа на действие входа в систему или действие регистрации, поэтому в этой ситуации полезен второй способ.)

0 голосов
/ 11 января 2012

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

т.е.,

если вы вызываете финиш (); перед функцией startActivity (intent) ;, предыдущее действие закончится и больше не будет в стеке действий.

0 голосов
/ 11 января 2012

Если вы используете HTML-страницы в своем проекте, значит, этот код будет вам полезен. Если вы хотите вернуться назад, значит просто включите этот javascript в вашу HTML-страницу, он обязательно будет работать во всех эмуляторах Android.

<a onclick="history.back(-1)" data-role="button" data-icon="back" data-theme="e" style="padding:8px;"></a>
0 голосов
/ 11 января 2012

Вы должны переопределить финиш ()

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
        // do something on back.
       this.finish();
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

Затем вызовите этот метод следующим образом:

@Override
    public void onBackPressed() {
     this.finish();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...