2013-03-28 1 views
0

я определил пользовательский класс предпочтений, который расширяет класс Dialogpreference для деятельности установок,Как вернуться к основной деятельности от onDialogClosed метода в классе DialogPreference

public class YesNoPreference extends DialogPreference { 

private boolean mWasPositiveResult; 
    DashboardActivity dashboardActivity; 
Context prefContext; 

public YesNoPreference(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    userSession = new UserSessions(context); 
    prefContext = context; 
} 

@Override 
protected void onDialogClosed(boolean positiveResult) { 
    super.onDialogClosed(positiveResult); 

    if (callChangeListener(positiveResult)) { 
     setValue(positiveResult); 

     /* Unset all user shared preferences */ 
     userSession.unsetSessionData(); 

    try { 
    dashboardActivity = new DashboardActivity(); 
    //dashboardActivity.loginScreen(); 
    Intent dashboard = new Intent(prefContext, DashboardActivity.class); 
    dashboardActivity.startActivity(dashboard); 

    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
    } 
} 

/** 
* Sets the value of this preference, and saves it to the persistent store 
* if required. 
* 
* @param value The value of the preference. 
*/ 
public void setValue(boolean value) { 
    mWasPositiveResult = value; 

    persistBoolean(value); 

    notifyDependencyChange(!value); 
} 

Am использованием dialogprefernce для выхода пользователя из приложения. Поэтому, если пользователь выбирает «ОК», параметры sharedprefernces должны быть отменены, а затем пользователь должен быть направлен на страницу входа в систему.

Я попытался создать функцию в классе Activity и затем вызвать ее в этом классе. Также используется класс Intent, но выполнение останавливается на

dashboardActivity.startActivity(dashboard); 

и генерирует исключение Null Pointer.

Пожалуйста, помогите мне, чтобы найти решение.

public class SettingsActivity extends Activity { 

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Display the fragment as the main content. 
    getFragmentManager().beginTransaction() 
      .replace(android.R.id.content, new SettingsFragment()) 
      .commit(); 
    } 

} 

public class SettingsFragment extends PreferenceFragment { 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Load the preferences from an XML resource 
     addPreferencesFromResource(R.xml.pref_settings); 
    } 
} 

ответ

1

использование

prefContext.startActivity(dashboard); 

вместо

dashboardActivity.startActivity(dashboard); 

для доступа startActivity метод. в настоящее время вы пытаетесь создать экземпляр DashboardActivity. Активность для доступа к методу startActivity. использование prefContext для начала Деятельность

+0

спасибо большое ... это сработало. Не могли бы вы также помочь мне понять, почему мы должны использовать объект Context, а не объект активности? Заранее спасибо – Mamta

+0

@Mamta: вы получаете 'NullPointerexception', потому что активность не такая же, как обычный класс java. как в java, мы создаем объект для доступа к любому методу из класса. никогда не пытайтесь создать объект Activity перед тем, как это всегда выкинет «NullPointerexception», если Activity не запущен, как в вашем случае DashboardActivity не запущен. –