Я пытаюсь решить проблему с моим приложением для Android.Android - Предотвращение дублирования окна на Intent & StartActivity
Проблема в том, что когда я запускаю новый экземпляр или класс, вызывая Intent и StartActivity, открывается дублирующее окно или представление.
Я хочу сохранить ту же активность или просмотр, но выполнить/запустить новый класс, не затрагивая представление. Цель состоит в том, чтобы просто выполнить расширенный класс, но я не хочу, чтобы он воссоздавал или открывал дублирующее представление.
Я пробовал использовать android: Launchmode = "singleTop", но не имеет никакого эффекта.
Я использовал стандартный пример ящика и классов навигации для Android. Вы увидите, что content_main.xml содержит viewswitcher, который включает в себя 2 других xml-файла, которые не требуют загрузки нового экземпляра или действия ... если это имеет смысл.
Я не уверен, что проблема связана с BeaconTracking.java, где она вызывает событие super.onCreate (...), возможно, заставив родительское представление повторно открыть?
Любые идеи, в которых я ошибаюсь?
Заранее благодарен!
AndroidManifest.xml
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar">
</activity>
<activity
android:name=".BeaconTracking"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
</activity>
MainActivity.java
public class MainActivity extends AppCompatActivity implements ...
public ViewSwitcher switcher;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
...
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.nav_vehicle_tracking) {
Intent intent = new Intent(getApplicationContext(), BeaconTracking.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
}
} else if (id == R.id.nav_vehicle_info) {
//SWITCH TO BEACON SCREEN
switcher.setDisplayedChild(2);
}
//CLOSE NAVIGATION DRAWER WHEN BUTTON IS PRESSED
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
BeaconTracking.java
public class BeaconTracking extends MainActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
switcher.setDisplayedChild(1);
}
content_main.xml
<?xml version="1.0" encoding="utf-8"?>
<ViewSwitcher
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/content_frame"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<include
android:layout_width="match_parent"
android:layout_height="match_parent"
layout="@layout/content_beacons" />
<include
android:layout_width="match_parent"
android:layout_height="match_parent"
layout="@layout/content_map" />
</ViewSwitcher>
Вы решили проблему? Я борюсь с чем-то вроде https://stackoverflow.com/questions/48024740/android-activity-multiple-instance – Pablo