Передача данных через намерения вместо конструкторов - PullRequest
2 голосов
/ 12 июня 2009

Разработав множество настольных приложений с графическим интерфейсом (от Xt до Qt, Java Awt / Swt / Swing и т. Д.), Мне действительно трудно привыкнуть к Android.

Предположим, у меня есть класс MainView Activity, который явно вызывает подробный просмотр через механизм намерений, как показано ниже:

  • Поскольку экземпляр класса Activity создается с помощью onCreate (), как мне настроить это? (Нет конструктора, только передать данные через намерение!)

  • Есть ли способ получить ссылку на экземпляр DetailView в MainActivity

  • Есть ли способ получить ссылку на экземпляр MainActivity в DetailedView

  • Как передать ссылку на FrontEnd классу DetailView? Intent.putExtras () позволяет только определенные типы данных для передачи умышленный получатель класса.

    MainActivity {
        ...
        FrontEnd fe;
        ...
    
        public void onCreate(Bundle savedInstanceState) {
            ...
            Intent myIntent = new Intent(this, DetailedView.class);
            ...
        }
    
        protected void onListItemClick(ListView l, View v, int position, long id) {
            ...
            startActivityForResult(myIntent,..);
            ...
        }
    }
    

Ответы [ 2 ]

2 голосов
/ 12 июня 2009

Одним из способов передачи простых данных между действиями / службами определенного приложения является использование функциональности SharedPreferences для Android.

Возможно, это не самый элегантный код для выполнения работы, но я обычно создаю статический «служебный» класс в своих проектах Android, чтобы разрешить получение одной строки и набор простых типов данных через общие предпочтения

private static final String PREFERENCE_FILE_NAME = "com.snctln.util.test.SharedPreferencesFile";
private static final String BOOL_VALUE_ONE = "bValueOne";

public static boolean getBooleanValue1(Context context)
{
    SharedPreferences prefs = context.getSharedPreferences(PREFERENCE_FILE_NAME, Context.MODE_PRIVATE);
    return prefs.getBoolean(BOOL_VALUE_ONE, true); // return true if the value does not exist
}

public static void setBooleanValue1(Context context, int appWidgetId, boolean actualvalue)
{
    SharedPreferences.Editor prefs = context.getSharedPreferences(PREFERENCE_FILE_NAME, Context.MODE_PRIVATE).edit();
    prefs.putBoolean(BOOL_VALUE_ONE, actualvalue);
    prefs.commit();
}
1 голос
/ 12 июня 2009

Я часто обманываю и использую статические вызовы getInstance для связи между действиями и представлениями. Это работает до тех пор, пока они оба находятся в одном и том же процессе, и у меня еще не было доступа к данным ... но я уверен, что это только вопрос времени ... ЕСЛИ вы ищете хакера это может быть быстрое решение, иначе вам придется передавать данные через намерения.

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