【问题标题】:How to open main activity from two separate icons with different ui如何从具有不同 ui 的两个单独图标打开主要活动
【发布时间】:2017-11-21 20:01:18
【问题描述】:

我有一个主要活动包括地图的应用程序。 我想在我的主屏幕启动器上创建两个图标,它们都将打开相同的主 Activity,但在地图上使用不同的 UI。

例如: 如果我按下图标 A,应用程序将在地图上打开并显示工厂,如果我按下图标 B,应用程序将在地图上没有工厂的情况下打开。

【问题讨论】:

  • 只需在不同的图标按下时处理 Fab for GONE 和 VISIBLE 的可见性,或者您可以在一个活动中制作两个片段并在图标按下时根据您的需要启动
  • 试试看 developer.android.com/guide/topics/ui/shortcuts.html 似乎是你想要的,但我认为它是最新版本
  • 我不知道这是否有效,但这似乎也是你需要的stackoverflow.com/questions/43361498/…
  • 我想我解释得不是很好。我想在我的主屏幕启动器上有不同的图标,我想在进入应用程序之前更改 UI。晶圆厂只是一个例子。而且我使用 api 21 所以我没有快捷方式
  • 我从未见过有两个图标的应用程序。似乎不是一个好习惯。为什么需要 2 个启动器图标?

标签: android android-manifest launcher


【解决方案1】:

首先,您需要在清单中添加第二个启动器意图。

        <activity
        android:name=".yourpackage.MapActivity"
        android:launchMode="singleTask"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>

        <meta-data android:name="visibility" android:value="0"/>
    </activity>

    <activity-alias
        android:name=".MapWithoutFabActivity"
        android:targetActivity=".yourpackage.MapActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>

      <meta-data android:name="visibility" android:value="1"/>
    </activity-alias>

接下来我们需要修改我们的地图 MapActivity 以准备更改 fab 按钮的可见性。

public class MapActivity extends AppCompatActivity {

   protected int fabVisibility = View.VISIBLE;

   @Override protected void onCreate(@Nullable Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);

       // Hope this method works. 
       Bundle bundle = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA).metaData;
    int visibility = Integer.valueOf(bundle.getString("visibility"));
    fab.setVisibility(visibility);
   }

protected void onNewIntent(Intent intent) {
       Bundle bundle = getPackageManager().getApplicationInfo(getPackageName(), 
       PackageManager.GET_META_DATA).metaData;
       int visibility = Integer.valueOf(bundle.getString("visibility"));
       fab.setVisibility(visibility);
}

祝你好运

埃姆雷

【讨论】:

  • 修复了一些失败。请再次检查
  • 如果应用程序已经打开,它会从上一个屏幕重新启动。表示如果您使用图标 A 打开应用程序,那么如果您单击 B,屏幕 A 将显示为应用程序显示其先前状态。
  • 它们都将以堆叠方式打开。他们是独立的。
  • 是的,我想过。但问题是我们不想实现另一个activity,我们想打开同一个地图activity只是改变地图上的UI
  • @EmreAkturk 是否可以两次提供相同的活动
猜你喜欢
  • 1970-01-01
  • 2023-01-31
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多