работает конструктор класса активности Android - PullRequest
4 голосов
/ 04 января 2012

При рассмотрении случая с активностью андроида, первым методом для работы является его onCreate метод .. верно?

Предположим, я хочу передать 2 параметра в класс активности Android, скажем UserHome. Для этого я создаю конструктор класса деятельности UserHome и принимаю параметры.

Но когда мы вызываем действие, мы не инициализируем класс Activity, мы просто создаем намерение класса UserHome.

Тогда как мы можем передавать параметры для этого действия из другого действия, не используя intent.putExtra("keyName", "somevalue"); использование.

Эксперты, пожалуйста, поясните, как мы можем охватить такую ​​ситуацию .?

Ответы [ 4 ]

8 голосов
/ 04 января 2012

Не уверен, почему вы не захотите использовать намеренные параметры.Вот для чего они здесь.Если вам нужно передать одни и те же параметры из разных мест в вашем приложении, вы можете рассмотреть возможность использования статического конструктора, который строит ваш намеренный запрос для вас.

Например:

/**
 * Sample activity for passing parameters through a static constructor
 * @author Chase Colburn
 */
public class ParameterizedActivity extends Activity {

    private static final String INTENT_KEY_PARAM_A = "ParamA";

    private static final String INTENT_KEY_PARAM_B = "ParamB";

    /**
     * Static constructor for starting an activity with supplied parameters
     * @param context
     * @param paramA
     * @param paramB
     */
    public static void startActivity(Context context, String paramA, String paramB) {
        // Build extras with passed in parameters
        Bundle extras = new Bundle();
        extras.putString(INTENT_KEY_PARAM_A, paramA);
        extras.putString(INTENT_KEY_PARAM_B, paramB);

        // Create and start intent for this activity
        Intent intent = new Intent(context, ParameterizedActivity.class);
        intent.putExtras(extras);
        context.startActivity(intent);
    }

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

        // Extract parameters
        Bundle extras = getIntent().getExtras();
        String paramA = extras.getString(INTENT_KEY_PARAM_A);
        String paramB = extras.getString(INTENT_KEY_PARAM_B);

        // Proceed as normal...
    }
}

Вы можете запустить свою деятельность, позвонив по телефону:

ParameterizedActivity.startActivity(this, "First Parameter", "Second Parameter");

3 голосов
/ 28 августа 2014

Я вижу одну ситуацию, когда вы не сможете использовать стандартный метод передачи параметров через Intent: при создании действия, которое будет запущено другим приложением (скажем, редактирование действия плагин Tasker ) и, следовательно, не имеет контроля над Intent, который запустит вашу деятельность.

Можно создать Activity, который принимает параметры в своем конструкторе. Однако хитрость в его использовании заключается не в том, чтобы использовать его напрямую, а в том, чтобы использовать производный класс с конструктором по умолчанию, который вызывает super() с соответствующими аргументами, например:

class BaseActivity extends Activity
{
    public BaseActivity(String param1, int param2)
    {
        // Do something with param1 and param2.
    }
    // Many more lines of awesomeness.
}

class DerivedActivity extends BaseActivity
{
    public DerivedActivity()
    {
        super("param1", 42);
    }
}

Естественно, если вам нужно сгенерировать параметры для передачи в BaseActivity(), вы можете просто заменить жестко запрограммированные значения вызовами функций.

0 голосов
/ 04 января 2012

Но вы также можете очень хорошо создать конструктор UserHome.

public class MainActivity extends Activity {
UserHome userHome = new UserHome(param1,param2);

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
userHome.yourMethod();
}}

Как вы думаете, почему невозможно инициализировать конструктор? .. MainActivity - это класс, как и любой другой, только расширяющий Activity, но также сохраняющий свойства класса, который может иметь конструкторы, методы, члены .

0 голосов
/ 04 января 2012

Мы можем передать значение из родительского действия в дочернее действие, используя связанную коллекцию и общие предпочтения. 1. Общее предпочтение 2. Коллекция Bundle

Передача данных или параметра в другое действие Android

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