小编Sta*_*ley的帖子

Android ViewPageAdapter,每个选项卡都有一个单独的backstack

我有一个Android应用程序,只有一个活动.该活动包含一个带有ViewPageAdapter的SlidingTabLayout,如例所示.每个选项卡都包含一个相应的根片段,然后当用户使用该屏幕时,我将其替换为其他片段.可视化表示如下所示:

在此输入图像描述

使用我当前的实现,我执行以下操作:转到tab1,通过将ProductRootFragment替换为ProductListFragment立即加载ProductListFragment.我点击了一个产品,它用ProductDetailFragment替换了ProductListFragment.现在我切换到tab2并通过替换Tab2RootFragment立即加载Tab2ListFragment.我单击一个项目,Tab2DetailFragment替换Tab2ListFragment.我现在返回到Tab1,正如我所料,仍然显示ProductDetailFragment.但是,如果我现在单击后退按钮,它不会像我期望的那样将我带回到ProductListFragment.相反,它从Backstack中弹出Tab2DetailFragment.

我想为每个"tab"片段实现一个单独的backstack.有几个关于这个的帖子,但它们似乎都已经过时了,有些人提出了非常精细的解决方案.(见这里,这里这里 ......)

似乎在最新版本的SDK中,Android可以自动处理这种backstack层次结构,而无需在我更换片段的事务中使用getChildFragmentManager而不是getSupportFragmentManager来手动实现某种后台堆栈.但是,我无法让它发挥作用.(我直觉地认为正确的解决方案就是让Android处理这个问题,因为感觉就像手动覆盖后退按钮并实现自己的堆栈一样精心设计.)

有人可以解释如何正确实现预期的行为,其中为每个选项卡维护单独的backstack?或者可能链接到一个简单,精心设计和最新的如何实现所需行为的示例?

有关我的代码的其他信息:在我的MainActivity.java中,我使用getSupportFragmentManager()构造ViewPagerAdapter.

ViewPagerAdapter.java

@Override
public Fragment getItem(int position) {
    switch(position){
        case 0: return new ProductRootFragment();
        ...
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

ProductRootFragment.java

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.product_root_fragment, container, false);

    FragmentTransaction transaction = getFragmentManager()
            .beginTransaction();
    transaction.replace(R.id.product_root_container, new ProductListFragment());
    transaction.commit();
    return view;
}
Run Code Online (Sandbox Code Playgroud)

ProductListFragment.java

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View layout = inflater.inflate(R.layout.product_list_fragment, container, false);
    view = (ProductListView) …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager

7
推荐指数
1
解决办法
1504
查看次数

在SSH客户端(PuTTy)关闭后如何从Rails控制台运行rails命令

我使用PuTTy连接到我们的Ubuntu生产服务器.

我想使用Solr重新索引特定的模型.我想从Rails控制台运行reindex命令,即Modelname.reindex(因为它似乎比rake任务运行得更快.)

但是,我们正在查看大量数据,这种索引预计需要几个小时.

我希望能够在rails控制台中启动此任务,即使退出PuTTy,它也应该继续运行.这该怎么做?

Linux:关闭SSH客户端建议nohup 后阻止后台进程停止,但我不知道是否/如何使用rails控制台.

ubuntu putty solr ruby-on-rails sunspot-solr

6
推荐指数
1
解决办法
2960
查看次数

如何正确限制对 Android 和 iOS 应用程序(用 Flutter 编写)的 Google 地图(地点、地理编码)API 调用?

我有一个用 Flutter 编写的移动应用程序。我正在为地点和地理编码调用 Google API。由于对这些服务的调用是通过在 url 中包含密钥来进行的,因此限制这些密钥非常重要,这样任何人都不能只是拦截并使用它们来拨打许多电话并为我们在 Google 上积累一个大帐户。

API 调用示例如下:

https://maps.googleapis.com/maps/api/place/autocomplete/json?input=$input&types=address&language=$lang&components=country:za&key=$apiKeyhttps://maps.googleapis.com/maps/api /geocode/json?latlng=$lat,$lon&key=$apiKey

(其中 $apiKey=我们的 Google Maps API Credentials Key $input、$lang、$lat 和 $lon 代表其他变量)

Google 目前允许对 API 凭据进行以下应用程序限制:

  • 没有任何
  • HTTP 引用
  • IP地址
  • 安卓应用
  • iOS应用

如果我的密钥没有任何限制(选项“无”),那么我的移动应用程序就可以正常工作。但是,如果我选择将其限制为 iOS 应用程序(并为我的应用程序指定捆绑标识符),我会收到错误消息“此 IP、站点或移动应用程序无权使用此 API 密钥”。当我将密钥限制为 Android 应用程序并为 Android 应用程序指定我的包 ID 和 SHA1 签名时,也会发生同样的情况。

我错过了什么?根据https://developers.google.com/maps/api-key-best-practices#restrict_apikey我应该可以将密钥限制为我的特定移动应用程序。似乎谷歌地图没有发现我确实是从正确的移动应用程序拨打电话。无论我是在模拟器中还是在调试或发布模式下的实际设备上运行它,都会发生错误。(我也从 Test Flight 测试了应用程序的 iOS 版本。当我取消限制时,我的 api 调用工作;当我将它限制为我的 iOS 应用程序的捆绑标识符时,它停止工作。)还有什么我需要配置的? 问题可能是应用程序是用 Flutter 编写的?

我发现一些链接(像这样)表明移动应用程序不应该直接在 url 中使用密钥,而应该使用我们自己的服务器作为 Google 的代理,然后我们应该限制对我们服务器 IP 的访问。这似乎是不必要的开销,因为将密钥限制为特定应用程序 ID 和平台的选项的存在表明这应该是可能的(就像我参考的 Google 文档一样)。

android google-maps ios google-places-api flutter

6
推荐指数
1
解决办法
550
查看次数

如何在c#中从网络摄像头获取位图图像的恒定流

我们有对视频流执行处理的 ac# 应用程序。这是一个低级应用程序,以 Bitmap 格式接收每一帧,所以基本上我们每秒需要 25 张图像。此应用程序已经适用于我们的一些媒体源,但我们现在需要添加一个网络摄像头作为输入设备。

所以我们基本上需要从网络摄像头连续捕获位图图像,以便我们可以将所有这些帧作为“流”传递给我们的应用程序。

访问网络摄像头并直接从网络摄像头读取实际帧作为单个图像的最佳和最简单的方法是什么?我还在起跑线上。

有许多库可以让人们访问网络摄像头,在 Windows 面板上预览网络摄像头的内容,然后使用屏幕捕获再次捕获该图像。不幸的是,当每秒捕获 25 帧时,这不会为我们提供必要的性能。IVMRWindowlessControl9::GetCurrentImage 已被提及作为另一种选择,但这似乎再次针对不频繁的快照而不是恒定的图像流。许多人都提到Directshow.Net是一个很好的候选者,但尚不清楚如何简单地从网络摄像头获取图像。此外,许多消息来源表示担心 Microsoft 不再支持 Directshow。此外,我见过的实现需要 ImageGrabber 显然也不再受支持. MS 较新的替代方案似乎是 Media Foundation,但我的研究还没有找到任何关于如何实现它的工作示例(我不确定这是否会在旧版本的 Windows 上运行,例如 XP)。DirectX.Capture是一个很棒的库(参见一个很好的实现),但似乎缺少直接获取视频图像的过滤器和方法。我也开始研究过滤器和过滤器图,但这看起来非常复杂,感觉有点像“重新发明轮子”。

总的来说,上面简要提到的所有解决方案似乎都相当陈旧。有人可以指点我的分步指南,让网络摄像头在 C# 中工作并每秒从中抓取几张图像吗?(我们还必须在某个时候做音频,因此不排除视频的解决方案将是最有帮助的)。

c# webcam directshow ms-media-foundation

5
推荐指数
1
解决办法
6699
查看次数

如何在使用Database First创建模型后,在Entity Framework中设置由数据库生成的id密钥

我在Web API项目中使用Entity Framework.我已经从现有的数据库(MySQL)创建了我的类和模型,所以我基本上使用EF DbContextGenerator从我的EDMX模型生成我的类.

读取操作正常,但我现在正处于开始添加向数据库添加记录的功能的位置.我希望数据库自动分配实体的id.

看起来当您遵循代码优先方法时,只需要指定:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
Run Code Online (Sandbox Code Playgroud)

在Id属性的类定义中.所以我很想简单地将"DatabaseGeneratedOption"添加到生成的类文件中.但是,由于我使用的是数据库优先方法,而且我的类基本上是为我自动生成的,所以我不应该编辑类文件,因为如果我再次重新生成类,它们将被重写.在哪里/如何设置由数据库而不是EF代码生成的Id值?

entity-framework

3
推荐指数
1
解决办法
9982
查看次数

如何删除和重新创建由模拟 api 创建的本地 dynamodb/appsync/amplify 数据库?

我正在使用 AWS Amplify 构建 Web 应用程序。我正在使用 Appsync 和 DynamoDb,并且已经定义了我的 GraphQL 架构。现在,Amplify 提供了通过从命令行运行“amplify mock api”来测试本地 GraphQL 端点的能力。我这样做了,它成功地为我创建了一些本地 GraphQL 端点,我能够插入一些数据并进行一些本地查询。(当我第一次运行“amplify mock api”时,我在控制台上收到了一些关于我的表已创建的消息。)

从那以后,我对我的 GraphQL 架构进行了相当大的更改,包括键、排序键等。我认为我的所有更改都没有成功应用于我的本地 api 和数据库表。所以我基本上只想完全删除我的本地“数据库”,以便“放大模拟 api”可以根据我的新模式为我重新生成一个新的本地数据库。我该怎么做呢?我不知道这个放大本地数据库所在的位置或它使用的底层技术。(否则我会直接连接到数据库并删除所有表以强制重新创建。)我尝试过“放大删除api”,它删除了本地端点。我什至将它推送到 AWS(我目前处于开发模式,所以我不介意破坏我的 AWS 环境。)然后我做了“放大添加 api” 再次从头开始,我再次输入我的模式。但是,如果我运行“放大模拟 api”,则它不会重新创建表。端点启动,如果我执行 GraphQL 查询,我会取回我最初添加的数据。这意味着这些表仍然存在。

如何完全删除本地“模拟”Amplify Appsync GraphQL 端点和数据库以强制重新创建?(如果相关,我正在使用 Mac)。

aws-appsync aws-amplify

3
推荐指数
1
解决办法
1227
查看次数

选择不适用于Crystal Reports和Visual Studio 2010的条件

我已经为一个报告继承了一个现有的Crystal Report(.rpt),该报告打印了相关数据集中的所有记录.

我现在想要添加选择标准,以便只在报告上打印带有匹配票号的结果.

我输入的选择标准是:

{REGISTER.TICKET_NO} = {?sTicketNo}

sTicketNo反映了我从C#中的文本框中读取的文本值,并作为参数传递给Crystal Reports.(参数传递肯定有效.当我将sTicketNo字段添加到报表时,它会打印我在文本框中输入的正确值).

问题是,无论我输入什么选择标准,报告都不会被过滤.无论标准如何,它始终打印所有记录.我已经使用其他硬编码标准进行了测试,例如仅选择具有非空值的记录.

我也尝试过C#和Crystal Reports SDK的建议- 忽略了选择标准而没有成功.

Crystal Reports中是否还有其他地方您必须指定您不希望打印所有记录?我在菜单"Crystal Reports">"报告">"选择专家">"记录"中添加了我的选择标准.我对水晶报道很新.也许该报告的作者在其他地方添加了一些设置以忽略选择标准,但我不确定在哪里看...

visual-studio-2010 crystal-reports

1
推荐指数
1
解决办法
6885
查看次数