Android определяет, какая кнопка была нажата, чтобы начать деятельность - PullRequest
2 голосов
/ 30 апреля 2011

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

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

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

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.subactivity);
        ComponentName callingActivity =  SubActivity.this.getCallingActivity();
            TextView listtype = (TextView) findViewById(R.id.subactivity_listtype);
        listtype.setText(callingActivity.flattenToString());

1 Ответ

5 голосов
/ 30 апреля 2011

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

Вот пример, который может вам помочь

Первый контекст (может быть Деятельность / Служба и т. Д.)

У вас есть несколько вариантов:

1) Использовать Bundle из Intent :

Intent mIntent = new Intent(this, Example.class);
Bundle extras = mIntent.getExtras();
extras.putString(key, value);  

2) Создатьновый пакет

Intent mIntent = new Intent(this, Example.class);
Bundle mBundle = new Bundle();
mBundle.extras.putString(key, value);
mIntent.putExtras(mBundle);

3) Используйте метод ярлыка putExtra () для Intent

Intent mIntent = new Intent(this, Example.class);
mIntent.putExtra(key, value);

Новый контекст (может быть Activity / Serviceи т.д.)

Intent myIntent = getIntent(); // this getter is just for example purpose, can differ
if (myIntent !=null && myIntent.getExtras()!=null)
     String value = myIntent.getExtras().getString(key);
}

ПРИМЕЧАНИЕ: Пакеты имеют методы "get" и "put" для всех примитивных типов, Parcelables и Serializables.Я просто использовал строки в демонстрационных целях.

...