我有一个包含FragmentActivity的android服装应用程序:
public class MyFirstFragment extends Fragment
有2个碎片:
public class MySecondFragment extends Fragment
和
WearableActivity
我想在此片段活动中启用环境模式(始终开启)。但是,根据documentation,环境模式仅在我展开FragmentActivity
时可用。
有没有办法同时拥有WearableActivity
和& FragmentActivity
在一起?
或
还有另一种方法可以在<Page
x:Class="MedicinesApp.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:MedicinesApp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Page.Resources>
<CollectionViewSource x:Name="FruitsCollectionViewSource" IsSourceGrouped="True"/>
<DataTemplate x:Key="template">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding}"/>
<TextBlock Text="{Binding ElementName=listView, Path=DataContext.Test}" Margin="20 0" />
</StackPanel>
</DataTemplate>
</Page.Resources>
<ListView
ItemsSource="{Binding Source={StaticResource FruitsCollectionViewSource}}"
x:Name="FruitGridView"
Padding="30,20,40,0"
SelectionMode="None"
IsSwipeEnabled="false"
IsItemClickEnabled="True"
ItemClick="FruitGridView_ItemClick">
<ListView.ItemTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Center" Width="250" Height="250">
<Border Background="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}">
<Image Source="{Binding Path=DiseaseImageSource}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/>
</Border>
<StackPanel VerticalAlignment="Bottom" Background="{ThemeResource ListViewItemOverlayBackgroundThemeBrush}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="Disease Name" Foreground="{ThemeResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource TitleTextBlockStyle}" Height="30" Margin="15,0,15,0"/>
<TextBlock Text="{Binding Path=DiseaseName}" Style="{StaticResource TitleTextBlockStyle}" Height="30" Margin="15,0,15,0"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Category of Disease" Foreground="{ThemeResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource BaseTextBlockStyle}" TextWrapping="NoWrap" Margin="15,0,87,10"/>
<TextBlock Text="{Binding Path=CategoryOfDisease}" Foreground="{ThemeResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource BaseTextBlockStyle}" TextWrapping="NoWrap" Margin="15,0,15,10"/>
</StackPanel>
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock Text='{Binding Key}' Foreground="Gray" Margin="5" FontSize="30" FontFamily="Segoe UI Light" />
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.Panel>
<ItemsPanelTemplate>
<VariableSizedWrapGrid MaximumRowsOrColumns="2" Orientation="Vertical" />
</ItemsPanelTemplate>
</GroupStyle.Panel>
</GroupStyle>
</ListView.GroupStyle>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid GroupPadding="0,0,70,0" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
中启用环境模式吗?
答案 0 :(得分:3)
您应该实施AmbientModeSupport.AmbientCallbackProvider
而不是WearableActivity
,然后您可以扩展FragmentActivity
。
这是新的首选方法,它仍然为您提供了WearableActivity的所有好处,但也允许您使用Activity
(或任何子类...... FragementActivity等)。
Official docs call out the details (and example code)
更新:立即使用AmbientModeSupport
代替AmbientMode
。 Google最近更改了名称,因此旧版本已弃用。
答案 1 :(得分:2)
对这两个问题的回答是否,抱歉。
通过调用WearableActivity.setUseAmbient()
启用环境模式,如果您未扩展WearableActivity
,则显然无法使用此模式。由于Java不支持多重继承,因此您不能同时对WearableActivity
和FragmentActivity
进行子类化 - 它是一个或另一个。
你真的需要在观看活动中使用Fragments吗?如果你真的想要支持环境模式,你可能需要考虑从片段中移动你的UI。
答案 2 :(得分:0)
如果您想在Android Wear上使用Fragments并支持环境模式,则需要使用AmbientModeSupport
类。
让您的活动扩展FragmentActivity
并实现AmbientModeSupport.AmbientCallbackProvider
,一切都准备就绪!
详细信息和示例在这里:https://developer.android.com/training/wearables/apps/always-on#ambient-mode-class