Извикване на метод в моята дейност PreferenceActivity от друга дейност

Здравейте и благодаря за помощта,

Имам следната ситуация.

В моето приложение използвам PreferenceActivity за показване и разрешаване на промени в настройките, нека го наречем PreferenceActivity A.

Ако потребителят избере едно конкретно предпочитание, се стартира нова дейност, нека я наречем Дейност Б (А не се унищожава).

Това, което трябва да направя, е да извикам метод на формуляр PreferenceActivity A в дейност B.

Моля, имайте предвид, че методът в PreferenceActivity A не може да бъде статичен.

Всяка помощ е много ценена.

РЕДАКТИРАНЕ РЕДАКТИРАНЕ РЕДАКТИРАНЕ РЕДАКТИРАНЕ РЕДАКТИРАНЕ

Ето как се стартира Activty B: Когато потребителят докосне съответния елемент в екрана PreferenceActivity A, намерението се задейства.

 <PreferenceScreen
        android:key="addstocks"
        android:summary="Click here to add stocks"
        android:title="Add stocks" >
        <intent
            android:targetClass="com.stocktickerwidget.QuotesActivity"
            android:targetPackage="com.stocktickerwidget" />

person Lisa Anne    schedule 05.04.2013    source източник
comment
Трябва ли да предавате аргументи на метода и трябва ли методът да връща нещо на извикващия? Каква е целта на извикването на този метод (т.е. дали е просто така, че потребителят да види нещо различно, когато се върне към Дейност А)?   -  person Karakuri    schedule 05.04.2013
comment
@Karakuri нищо не трябва да се предава. Дейност А ще промени външния вид поради извикването на този метод.   -  person Lisa Anne    schedule 05.04.2013
comment
В такъв случай препоръчвам да използвате startActivityForResult(), да върнете резултат и да промените външния вид в onActivityResult(). Потенциално бихте могли да използвате Handler и Messenger, но мисля, че първият е по-лесен и по-ясен.   -  person Karakuri    schedule 05.04.2013
comment
@Karakuri съжалявам, не мога да използвам startActivityForResult(), защото Дейност B се стартира по начина, по който можете да видите в редактирания код.   -  person Lisa Anne    schedule 05.04.2013
comment
да, можеш. задайте OnPreferenceClickListener на това предпочитание и стартирайте ActivityB сами.   -  person Karakuri    schedule 05.04.2013


Отговори (1)


Вместо да стартирате дейността по този начин, задайте ръчно OnPreferenceClickListener в предпочитанието и използвайте startActivityForResult().

private static final int RESUEST_CODE = 1;
protected void onCreate() {
    /* ... */
    Preference pref = getPreferenceManager().findPreference("addstocks");
    pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
        public boolean onPreferenceClick(Preference preference() {
            if (preference.getKey().equals("addstocks") {
                startActivityB();
                return true;
            }
            return false;
        }
    });
}

private void startActivityB() {
    Intent intent = new Intent(this, ActivityB.class);
    startActivityForResult(intent, REQUEST_CODE);
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
        // do something here
    }
}
person Karakuri    schedule 05.04.2013