Как вызвать начальную активность из одного класса Java

Можно ли запустить Activty с помощью Intent в общем классе java, который extends Activity?

import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Spinner; import android.app.Activity; import android.content.Intent; public class SubActivity extends Activity{ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }

И общий класс java, такой как

class TestClass extends Activity{ void firstsem(){ Intent t = new Intent(this, SubActivity.class); t.putExtra("sub1","chemistry"); startActivity(t); }
}

Можно ли запустить Activity из общего класса java? Может ли кто-нибудь показать мне, как это сделать?

4 ответа

Для запуска Activity вам понадобится Context.

Метод startActivity(Intent intent) наследуется от класса Context. Как это видно в документации

Также явный Intent сам нуждается в Context в своем конструкторе.

Intent(Context packageContext, Class<!--?--> cls)

Как Activity extends Context, и вы увеличили активность, вы можете использовать свой собственный класс как Контекст. И поэтому просто назовите

void method() { startActivity(new Intent(this, ActivityName.class));
}

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

public static void startActivity(Context context) { context.startActivity(new Intent(context, ActivityName.class));
}

ОСНОВНОЕ ОСУЩЕСТВЛЕНИЕ

public class ActivityA extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(); } public void onClick(View view) { ActivityStarter.startActivityB(this); }
}
public class ActivityB extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(); }
}
public class ActivityStarter { public static void startActivityB(Context context) { Intent intent = new Intent(context, ActivityB.class); intent.putExtra("sub1","chemistry"); context.startActivity(intent); }
}


Да, это возможно. И расширение деятельности тоже не обязательно. Назовите наш пользовательский класс как Custom.java Предположим, что нам нужно запустить класс NewActivity, когда method() вызывается в нашем пользовательском классе.

ШАГ 1:

Как отметил EndZeit, вам нужен контекст вашего класса MainActivity в вашем классе Custom.java для запуска нового действия с этой точки.

Custom custom = new Custom(MainActivity.this);

ШАГ 2:

В пользовательском классе создайте конструктор и получите переданный контекст:

Private Context context;
public Custom (Context context) { this.context = context;
}

ШАГ 3:

Теперь запустите новое действие:

public void method() { Intent intent = new Intent(context, NewActivity.class); context.startActivity(intent);
}

Вы закончили:)


Измените эту строку:

Intent t= new Intent(testclass.this,Subject.class);

в

Intent t= new Intent(testclass.this,subactivity.class);

Также добавьте ссылку на субактивность в файле манифеста

Что-то вроде:


Когда класс расширяется Activity, он переходит в класс Activity. Итак, ваши оба класса, subactivity и testclass, класс активности.

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

Следуйте приведенной ниже обучающей ссылке... вы узнаете, как начать активность с другого действия.

Активность Android - с экрана на другой экран

licensed under cc by-sa 3.0 with attribution.