Android - 防止Intent和StartActivity上的重复窗口



我正在尝试解决我的android应用程序的问题。

问题是,当我通过调用Intent和StartActivity来启动一个新实例或类时,会打开一个重复的窗口或视图。

我希望保留相同的活动或视图,但在不影响视图的情况下执行/运行新的类。其目的只是执行一个扩展类,但我不希望它重新创建或打开一个重复的视图。

我尝试过使用android:Launchmode="singleTop",但没有效果。

我使用了标准的android导航抽屉示例xml和类。您将看到content_main.xml包含一个视图切换器,其中包括另外两个不需要加载新实例或活动的xml文件。。。如果这有道理的话。

我不确定问题是否出在Beacon Tracking.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;
}

信标跟踪.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>

android:Launchmode="singleTop"在这里没有帮助,你为什么要打开另一个活动?你可以在当前活动中使用视图切换器管理它,但你仍然想打开没有重复窗口的另一个活动。在这种情况下,您可以使打开活动的ui透明。

<activity  android:name = "BeaconTracking" 
android:label = "@string/app_name" 
android:theme = "@android:style/Theme.NoDisplay" >

或主题为@android:style/Theme.Translucent.NoTitleBar"

并将父类替换为Beacon Tracking的AppCompatActivity。但仍将在后堆栈中添加信标跟踪活动。

每个Activity都有自己的视图。如果不想打开新视图,则不应该启动新的Activity。只需将BeaconActivity的功能移动到MainActivity即可。

Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

尝试在Manifest中使用android:launchMode="singleInstance"。

相关内容

  • 没有找到相关文章

最新更新