Есть ли соглашение для вспомогательного класса в Android? - PullRequest
4 голосов
/ 21 сентября 2011

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

Сначала я подумал об одноэлементном классе.Я мог бы добавить статические методы / переменные и использовать их в приложении.Я действительно не пытался понять, как это будет работать в приложении для Android.В поисках немного больше я увидел кое-что о создании класса, расширяющего Application.Для этого я сделал простой тест:

public class MyApp extends Application {
    public static String DEMOTEXT = "WORKING!";

    public static void ShowToast(Context context, String text) {
        Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
    }
}

MyApp.ShowToast(this, MyApp.DEMOTEXT); // Placed on onCreate of some Activity

Это работает точно так, как я ожидал.Это способ пойти на Android или есть лучшее соглашение?Что-нибудь еще, что я должен рассмотреть, делая это?

Кстати, я должен использовать ключевое слово final в строке?Как насчет метода?

РЕДАКТИРОВАТЬ: Я только что прочитал это:

Обычно нет необходимости создавать подкласс Application.В большинстве случаев статические синглтоны могут предоставлять ту же функциональность более модульным способом.Если вашему синглтону необходим глобальный контекст (например, для регистрации широковещательных приемников), функции для его получения может быть задан контекст, который внутренне использует Context.getApplicationContext () при первом создании синглтона.1020 *http://developer.android.com/reference/android/app/Application.html

Должен ли я использовать синглтон тогда?

Ответы [ 3 ]

3 голосов
/ 21 сентября 2011

Приложение в основном используется для глобальной инициализации приложения. Вы должны создать свой собственный класс, переопределить Application.onCreate () и инициализировать там свои статические данные приложения.

Не забудьте объявить это в AndroidMainfest.xml:

<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:name="your.package.path.to.MyApp">

Статический вспомогательный класс создается так, как вы.
Соглашение состоит в том, чтобы использовать строчную букву в первой позиции, поэтому MyApp.showToast(...).

Вы бы использовали final для String, если хотите избежать смазываний в других местах (поскольку это должно быть продолжение).

// this would allow ...
public static String DEMOTEXT = "WORKING!";

// ... to do this somewhere else
MyApp.DEMOTEXT = "NOT WORKING!"
2 голосов
/ 21 сентября 2011

Я не пробовал это, но я думаю, что вы должны быть в состоянии сделать что-то подобное также.

public class MyActivity extends Activity {
    private static final String DEMOTEXT = "WORKING!";

    @Override
    public void onCreate(Bundle bundle) 
    {
        super.onCreate(bundle);
        Toast.makeText(this, DEMOTEXT, Toast.LENGTH_SHORT).show();
    }
}

Теперь для всех действий, которые должны использовать эту инициализацию, можно просто расширить базовый класс активности.

public class SomeActivity extends MyActivity {
    ...
    // Should display the toast on create
    ...
}
1 голос
/ 21 сентября 2011

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

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