Сама активность открывается при вызове startActivity

У меня есть MainActivity в этом действии я получил фрагмент, у которого есть listView. При нажатии на элемент в этом спискеView я делаю это:

startActivity(new Intent(v.getContext(), КатегорияActivity.class));

это отлично работает, так как он запускает мой CategoryActivity.classно, он сначала снова запускает MainActivity и только после этого открывает мой CategoryActivity. Я не понимаю, почему это происходит. Итак, теперь, когда я нажимаю кнопку «Назад» в моем CategoryActivity, я попадаю в свой MainActivity, могу снова нажать кнопку «Назад» и снова вернуться к MainActivity.

Любые мысли о том, почему это могло произойти?

Обновлено: мой код onclick

storeListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
     @Override
     public void onItemClick(AdapterView<?> adapter, View view, int position, long arg) {

         // some irrelevant code

         final View v = view;

         final IQueryResult<IStoreItemConfiguration> itemConfigs = new IQueryResult<IStoreItemConfiguration>() {
             @Override
             public void result(List<IStoreItemConfiguration> results) {

                 // some code

                 startActivity(new Intent(v.getContext(), CategoryActivity.class));
             }
         }
    }
}

Обновлено: соответствующая часть моего манифеста

    <activity
        android:name = ".activities.MainActivity"
        android:screenOrientation = "portrait">
    </activity>
    <activity
        android:name = ".activities.AuthenticationActivity"
        android:screenOrientation = "portrait">
        <intent-filter>
            <action android:name = "android.intent.action.MAIN" />

            <category android:name = "android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name = ".activities.CategoryActivity"
        android:label = "@string/title_activity_category"
        android:parentActivityName = ".activities.MainActivity"
        android:screenOrientation = "portrait"
        android:theme = "@style/AppTheme" />

опубликуйте свой код, который обрабатывает щелчок элемента

karan 20.03.2019 13:51

@KaranMer, пожалуйста, посмотрите мое редактирование

progNewbie 20.03.2019 13:56

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

karan 20.03.2019 13:56

Пожалуйста, покажите также свой AndroidManifest.xml

Christopher 20.03.2019 13:57

@KaranMer нет, не знаю. Я также вижу, что основная активность снова открывается, прежде чем она откроет мою следующую активность.

progNewbie 20.03.2019 13:58

убедитесь, что вы не вызываете какой-либо другой метод в onitemclick, который может снова запустить вашу активность.

karan 20.03.2019 13:59

@ Кристофер, пожалуйста, посмотри мое редактирование. КаранМер Спасибо. Я сделал. Я не звоню.

progNewbie 20.03.2019 14:02

где MyNextActivity в манифесте??

Aalap Patel 20.03.2019 14:09

@AalapPatel извините, это называется CategoryActivity, как в моем примере кода ниже. Я отредактирую первый пример в своем вопросе.

progNewbie 20.03.2019 14:12

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

Aalap Patel 20.03.2019 14:19

@AalapPatel Я хочу, чтобы он возвращался к основной активности при нажатии «назад»

progNewbie 20.03.2019 14:21

Кажется, дополнение android:launchMode = "singleTask" к моему MainActivity решило проблему.

progNewbie 20.03.2019 14:25

Почему вы берете контекст из представления, а не из самой активности?

Nicola Gallazzi 20.03.2019 14:53
0
13
98
2

Ответы 2

startActivity(new Intent(getActivity(), CategoryActivity.class));

в onBackPressed() поставьте finish() или finishAffinity(), как хотите.

Проблема уже возникает при запуске Activity. Я уже делаю то, что вы предлагаете для начала.

progNewbie 20.03.2019 14:05

Вы пробовали это? Намерение намерение = новое намерение (listView.getContext(),/*Ваше следующее действие*/); listView.getContext().startActivity(намерение);

MDB 20.03.2019 14:32

Лучший способ вызвать Activity из класса Fragment — создать interface во фрагменте и добавить метод onItemClick() в этот интерфейс. Теперь внедрите его в свое первое действие и вызовите оттуда второе действие.

Если вы хотите вызвать из своего фрагмента, вы можете использовать этот метод.

public class **YourFragmentClass** extends Fragment {

    Context context; //Declare the variable context

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
          Bundle savedInstanceState) {

    //Pass your layout xml to the inflater and assign it to rootView.
      View rootView = inflater.inflate(R.layout.**yourfragmentxml**, container, false); 
            context = rootView.getContext(); // Assign your rootView to context

            Button **yourButton** = (Button) rootView.findViewById(R.id.**your_button_id**);
            **yourButton**.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //Pass the context and the Activity class you need to open from the Fragment Class, to the Intent
                    Intent intent = new Intent(context, **YourActivityClass**.class); 
                    startActivity(intent);
                }
            });
            return rootView;
        }
    }

единственная разница в том, что вы используете rootView.getContext(), когда я делаю это, возникает та же проблема.

progNewbie 20.03.2019 14:08

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

Surbhi Aggarwal 20.03.2019 14:12

Я не понимаю, почему это решит проблему и почему это не должно работать так, как я это делаю сейчас.

progNewbie 20.03.2019 14:13

Посмотрите, почему это должно работать и почему это не должно - ответ на них можно узнать, но сначала нужно попробовать предложенный ответ. Тогда вы можете спросить, почему это сработало, а это нет

Surbhi Aggarwal 20.03.2019 14:16

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

progNewbie 20.03.2019 14:20

Другие вопросы по теме