Android Studio: как отправить и получить класс в различных видах деятельности - PullRequest
0 голосов
/ 09 декабря 2018

Я создаю игру-викторину с вопросами по различным темам. Например, у меня есть занятия по таким темам: Флаги, Столицы, Население, Экономика, Континент и т. Д.

И у меня есть одна единственная ResultActivity для получения балла.викториныResultActivity имеет кнопку PLAY AGAIN.

На FlagsActivity у меня есть этот код:

Intent intent = new Intent(getApplicationContext(),ResultActivity.class);
intent.putExtra("RIGHT_ANSWER_COUNT", score);
intent.putExtra("NAME_ACTIVITY", "FlagsActivity");
startActivity(intent);

На CapitalActivity у меня есть этот код:

Intent intent = new Intent(getApplicationContext(),ResultActivity.class);
intent.putExtra("RIGHT_ANSWER_COUNT", score);
intent.putExtra("NAME_ACTIVITY", "CapitalActivity");
startActivity(intent);

и т. Д.....

На ResultActivity у меня есть этот код:

    activity = getIntent().getStringExtra("NAME_ACTIVITY");


public void playAgain(View view){

        if(activity.equals("FlagsActivity")){
            Intent intent = new Intent(getApplicationContext(), FlagsActivity.class);
            startActivity(intent);
        }
        if(activity.equals("CapitalActivity")){
            Intent intent = new Intent(getApplicationContext(), MainActivity.class);
            startActivity(intent);
        }
        if(activity.equals("PopulationActivity")){
            Intent intent = new Intent(getApplicationContext(), PopulationActivity.class);
            startActivity(intent);
        }
        if(activity.equals("EconomyActivity")){
            Intent intent = new Intent(getApplicationContext(), EconomyActivity.class);
            startActivity(intent);
        }
        if(activity.equals("ContinentActivity")){
            Intent intent = new Intent(getApplicationContext(), ContinentActivity.class);
            startActivity(intent);
        }
    }

В основном я отправляю Intent со строкой, содержащей имя действия, затем на Result Activity, оцениваемой с помощью "если "Строка = Имя этого действия, запустите действие.

Я хочу сделать что-то вроде этого:

На флагах Активность:

Intent(getApplicationContext(),ResultActivity.class);
    intent.putExtra(FlagsActivity.class);
    startActivity(intent);

ВклCapitalActivity:

Intent(getApplicationContext(),ResultActivity.class);
    intent.putExtra(CapitalActivity.class);
    startActivity(intent);

в результате действий:

activity = getIntent();


public void playAgain(View view){

            Intent intent = new Intent(getApplicationContext(), activity);
            startActivity(intent);
        }

, чтобы я мог создать столько действий викторины, не создавая заявление "если" на ResultActivity для него, чтобыработа.

Ответы [ 4 ]

0 голосов
/ 09 декабря 2018

При получении данных

String activity;
 Bundle bundle = getIntent().getExtras();
    if (bundle != null){
        activity = bundle.getString("NAME_ACTIVITY");
    }
0 голосов
/ 09 декабря 2018

Вы можете передать String имени действия в действие Result и получить соответствующее имя класса, используя отражение:

String strActivity = "com.package.FlagsActivity";
Intent intent = new Intent(getApplicationContext(),ResultActivity.class);
intent.putExtra("activity_name", strActivity );
startActivity(intent);


String activityName = getIntent().getStringExtra("activity_name");   
Class<?> myClass = Class.forName(activityName );
Intent myIntent = new Intent(getApplicationContext(), myClass);
0 голосов
/ 09 декабря 2018

Примерно так.

В результате действия

public static void toActivity(Context context, final Class ActivityToOpen){

    //whatever awesome code you would like to perform

    Intent intent = new Intent(context, ActivityToOpen);
    startActivity(intent);
}

В исходном действии (например, флаги)

ResultsActivity.toActivity(FlagsActivity.this, FlagActivity.class);

Проверка на опечатки ..Я вроде как это сделал :) Вы должны иметь возможность звонить из любой исходной Деятельности без оператора if.

0 голосов
/ 09 декабря 2018

Вы можете передать имя класса в виде строки и использовать отражение, чтобы найти объект класса для этого типа.Примерно так:

Class classToLoad = Class.forName(getIntent().getStringExtra("NAME_ACTIVITY"));
Intent intent = new Intent(getApplicationContext(),  classToLoad);
startActivity(intent);

Я бы передал полное имя класса, чтобы избежать ошибок.

...