ابدأ نشاطًا بمعلمة
-
29-09-2019 - |
سؤال
أنا جديد جدًا في تطوير Android.
أرغب في إنشاء وبدء نشاط لإظهار معلومات حول اللعبة. أعرض تلك المعلومات التي أحتاجها إلى GameId.
كيف يمكنني تمرير معرف اللعبة هذا إلى النشاط؟ يعد معرف اللعبة ضروريًا للغاية ، لذا لا أريد إنشاء النشاط أو بدء تشغيله إذا لم يكن لديه المعرف.
إنه مثل النشاط الذي حصل عليه فقط واحد مُنشئ مع معلمة واحدة.
كيف أقوم بذلك؟
شكرًا.
المحلول
ضع int
وهو هويتك في الجديد Intent
.
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
Bundle b = new Bundle();
b.putInt("key", 1); //Your id
intent.putExtras(b); //Put your id to your next Intent
startActivity(intent);
finish();
ثم احصل على المعرف في الجديد الخاص بك Activity
:
Bundle b = getIntent().getExtras();
int value = -1; // or other values
if(b != null)
value = b.getInt("key");
نصائح أخرى
فقط أضف بيانات إضافية إلى القصد الذي تستخدمه للاتصال بنشاطك.
في نشاط المتصل:
Intent i = new Intent(this, TheNextActivity.class);
i.putExtra("id", id);
startActivity(i);
داخل oncreate () من النشاط الذي تسميه:
Bundle b = getIntent().getExtras();
int id = b.getInt("id");
تحرير: عفوًا ، كان تشارلي شين أسرع.
أحب أن أفعل ذلك بطريقة ثابتة في النشاط الثاني:
private static final String EXTRA_GAME_ID = "your.package.gameId";
public static void start(Context context, String gameId) {
Intent intent = new Intent(context, SecondActivity.class);
intent.putExtra(EXTRA_GAME_ID, gameId);
context.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
...
Intent intent = this.getIntent();
String gameId = intent.getStringExtra(EXTRA_GAME_ID);
}
ثم من نشاطك الأول (وفي أي مكان آخر) ، أنت فقط:
SecondActivity.start(this, "the.game.id");
الإجابات الموجودة (تمرير البيانات في Intent
مرت ل startActivity()
) إظهار الطريقة العادية لحل هذه المشكلة. هناك حل آخر يمكن استخدامه في الحالة الفردية حيث تقوم بإنشاء نشاط سيبدأه تطبيق آخر (على سبيل المثال ، أحد أنشطة التحرير في أ تاسكر البرنامج المساعد) وبالتالي لا تتحكم في Intent
الذي يطلق Activity
.
يمكنك إنشاء فئة قاعدة Activity
يحتوي ذلك على مُنشئ يحتوي على معلمة ، ثم فئة مشتقة بها مُنشئ افتراضي يدعو إلى مُنشئ الفئة الأساسية بقيمة ، مثل:
class BaseActivity extends Activity
{
public BaseActivity(String param)
{
// Do something with param
}
}
class DerivedActivity extends BaseActivity
{
public DerivedActivity()
{
super("parameter");
}
}
إذا كنت بحاجة إلى إنشاء المعلمة لتمريرها إلى مُنشئ الفئة الأساسية ، فما عليك سوى استبدال القيمة المرمزة بدالة تعيد القيمة الصحيحة لتمريرها.
كود كوتلين:
ابدأ ال SecondActivity
:
startActivity(Intent(context, SecondActivity::class.java)
.putExtra(SecondActivity.PARAM_GAME_ID, gameId))
احصل على الهوية SecondActivity
:
class CaptureActivity : AppCompatActivity() {
companion object {
const val PARAM_GAME_ID = "PARAM_GAME_ID"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val gameId = intent.getStringExtra(PARAM_GAME_ID)
// TODO use gameId
}
}
أين gameId
هو String?
(يمكن أن يكون فارغا)