java getstring كيف يمكنني بدء نشاط android جديد باستخدام سلسلة؟



get string by name (4)

أواجه مشكلة في تطبيق Android أعمل عليه.

يحتوي التطبيق الخاص بي على عدة أقسام وتعتمد الشاشة التالية التي يتم تحميلها على سلسلة. لذا ، فإن الشاشة 1 من القسم 1 ستكون ، S1S1.

سؤالي هو ، كيف يمكنني بدء نشاط يستند إلى سلسلة. لدي S1S1 المحفوظة في سلسلة ، دعنا نسميها nextactivity. بدلاً من الاضطرار إلى كتابة S1S1.class ، أحتاج إلى أن تأتي من السلسلة. لقد تعاملت مع كل شيء يمكنني أن أفعله ولم تساعدني خدمة google.

بعض الأشياء التي حاولت هي

Intent myIntent = new Intent(nextactivity);
Intent myIntent = new Intent(v.getContext(), getClass().getName().valueOf(nextactivity));
Intent myIntent = new Intent(v.getContext(), Class.forName(nextactivity));

وحاولت الجري مع

startActivityForResult(myIntent, 0); 

لكن يبدو أن لاشئ يعمل. أيه أفكار؟


Answer #1

طريقة أفضل (وواحدة تستخدم في النظام لتشغيل Browser.apk مع تطبيقات أخرى غير مجمعة مع AOSP):

Intent intent = new Intent();
intent.setClassName("com.android.browser","com.android.BrowserActivity");

context.startActivity(intent);

بدلاً من ذلك ، إذا كنت تريد التحقق من أنه يمكنك بدء Activity من سطر الأوامر ، فيمكنك القيام بشيء كهذا من shell:

adb shell
am start com.android.browser/.BrowserActivity

Answer #2

إليك رمزًا يمكنك من خلاله بدء النشاط باستخدام اسم النشاط

String activityToStart = "com.example.MainActivity";
try {
    Class<?> c = Class.forName(activityToStart);
    Intent intent = new Intent(this, c);
    startActivity(intent);
} catch (ClassNotFoundException ignored) {
}

تصحيح

سيكون اسم الفئة هذا هو الاسم الكامل للفصل الذي يحمل اسم الحزمة. على سبيل المثال ، إذا كان اسم الحزمة هو xyz وإذا كان لديك اسم نشاط يسمى A فسيكون الاسم الكامل xyzA A هو xyzA .


Answer #3

أنا لست على علم الحل ولكن لدي بديل .. الطريقة مشابهة لإخفاء div وتظهر في صفحات الويب.

إذا كان s1s1 الخاص بك هو تحميل محتوى منخفض يكون لهم في linearlayout والحفاظ على ظهورهم ذهبوا على تحميل النموذج S1. عند النقر على S1 للوصول إلى s1s1 إخفاء s1 وتعيين المعلمات من الرؤية إلى "مرئية".

من خلال القيام بذلك ، يمكنك تجنب إنشاء نشاط منفصل وهذه الطريقة أيضًا سهلة للتنقل مرة أخرى.


Answer #4

استخدم التعداد!

public enum SectionActivity {

  S1S1(MyS1Activity.class),
  S1S2(S2Activity.class);

  private Class<? extends Activity> activityClass;

  private SectionActivity(Class<? extends Activity> clazz) {

   this.activityClass = clazz;
  }

  public Class<? extends Activity> getActivity {
     return activityClass;
  }    
}

ثم في مكان ما في التعليمات البرمجية الخاصة بك:

SectionActivity act = SectionActivity.valueOf(string);
Intent intent = new Intent(this, act.getActivity());
startActivity(intent);




android-activity