У меня есть 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" />
@KaranMer, пожалуйста, посмотрите мое редактирование
Выглядит нормально, убедитесь, что вы не запускаете MainActivity, когда нажимаете назад в следующей активности. опубликуйте свой код с обратной печатью в следующей активности
Пожалуйста, покажите также свой AndroidManifest.xml
@KaranMer нет, не знаю. Я также вижу, что основная активность снова открывается, прежде чем она откроет мою следующую активность.
убедитесь, что вы не вызываете какой-либо другой метод в onitemclick, который может снова запустить вашу активность.
@ Кристофер, пожалуйста, посмотри мое редактирование. КаранМер Спасибо. Я сделал. Я не звоню.
где MyNextActivity в манифесте??
@AalapPatel извините, это называется CategoryActivity, как в моем примере кода ниже. Я отредактирую первый пример в своем вопросе.
да, я вижу, что у него есть родительская активность как MainActivity, поэтому, щелкнув назад, вы переходите к основной активности из активности категории, попробуйте вывести из нее родительскую активность и посмотрите.
@AalapPatel Я хочу, чтобы он возвращался к основной активности при нажатии «назад»
Кажется, дополнение android:launchMode = "singleTask" к моему MainActivity решило проблему.
Почему вы берете контекст из представления, а не из самой активности?
startActivity(new Intent(getActivity(), CategoryActivity.class));
в onBackPressed() поставьте finish() или finishAffinity(), как хотите.
Проблема уже возникает при запуске Activity. Я уже делаю то, что вы предлагаете для начала.
Вы пробовали это? Намерение намерение = новое намерение (listView.getContext(),/*Ваше следующее действие*/); listView.getContext().startActivity(намерение);
Лучший способ вызвать 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(), когда я делаю это, возникает та же проблема.
Если вы пробовали использовать getActivity() и getContext(), то вы можете выбрать лучший метод, поскольку я предположил, что вы должны использовать интерфейс.
Я не понимаю, почему это решит проблему и почему это не должно работать так, как я это делаю сейчас.
Посмотрите, почему это должно работать и почему это не должно - ответ на них можно узнать, но сначала нужно попробовать предложенный ответ. Тогда вы можете спросить, почему это сработало, а это нет
Дело в том, что я использую тот же код, что показан в других активностях, и там он у меня работает, и я не хочу менять структуру кода вот так, когда я даже не вижу причины, по которой это могло бы помочь.
опубликуйте свой код, который обрабатывает щелчок элемента