小编Gab*_*tin的帖子

WPF用户控件中的数据绑定

我正在为几个窗口共享的一系列控件创建一个UserControl.其中一个控件是Label,它根据"协议编号"显示其他一些过程的流程.

我正在尝试使用此Label提供DataBinding,因此Window会在协议编号变量更改时自动反映进程的状态.

这是用户控件XAML:

<UserControl Name="MainOptionsPanel"
    x:Class="ExperienceMainControls.MainControls"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    DataContext="{Binding RelativeSource={RelativeSource Self}}"
    >
<Label Height="Auto" Name="numberLabel">Protocol:</Label>
<Label Content="{Binding Path=ProtocolNumber}" Name="protocolNumberLabel"/>
(...)
</UserControl>
Run Code Online (Sandbox Code Playgroud)

这就是Code-Behind:

public partial class MainControls 
{
    public MainControls()
    {
        InitializeComponent();
    }

    public int ProtocolNumber
    {
        get { return (int)GetValue(ProtocolNumberProperty); }
        set { SetValue(ProtocolNumberProperty, value); }
    }

    public static DependencyProperty ProtocolNumberProperty = 
       DependencyProperty.Register("ProtocolNumber", typeof(int), typeof(MainControls));
}
Run Code Online (Sandbox Code Playgroud)

这似乎是有效的,因为如果在构造函数中我将ProtocolNumber设置为任意值,它将反映在用户控件中.

但是,在最终窗口上使用此用户控件时,数据绑定会中断.

XAML:

<Window x:Class="UserControlTesting.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:expControl="clr-namespace:ExperienceMainControls;assembly=ExperienceMainControls"
    DataContext="{Binding RelativeSource={RelativeSource Self}}"
    >
    <StackPanel>
        <expControl:MainControls ProtocolNumber="{Binding Path=Number, Mode=TwoWay}" />
    </StackPanel>

</Window>
Run Code Online (Sandbox Code Playgroud)

窗口的代码隐藏:

public partial class …
Run Code Online (Sandbox Code Playgroud)

c# data-binding wpf xaml user-controls

32
推荐指数
2
解决办法
8万
查看次数

select2:使用AJAX进行多选的默认选择

我正在使用awesome select2创建一个多选组合.

我想以编程方式选择默认值(如用户先前所做的选择),但我不知道如何.我读到使用initSelection可以解决这个问题,但是在创建组合时会调用它,我不希望始终完成此默认选择.

jquery jquery-select2

20
推荐指数
3
解决办法
3万
查看次数

如何调试SEGV_ACCERR

我有一个使用KickflipButterflyTV libRTMP传输视频的应用程序

现在有99%的时间应用程序正常工作,但我不时会遇到一个我无法调试的本机分段错误,因为消息太含糊了:

01-24 10:52:25.576 199-199/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-24 10:52:25.576 199-199/? A/DEBUG: Build fingerprint: 'google/hammerhead/hammerhead:6.0.1/M4B30Z/3437181:user/release-keys'
01-24 10:52:25.576 199-199/? A/DEBUG: Revision: '11'
01-24 10:52:25.576 199-199/? A/DEBUG: ABI: 'arm'
01-24 10:52:25.576 199-199/? A/DEBUG: pid: 14302, tid: 14382, name: MuxerThread  >>> tv.myapp.broadcast.dev <<<
01-24 10:52:25.576 199-199/? A/DEBUG: signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x9fef1000
01-24 10:52:25.636 199-199/? A/DEBUG: Abort message: 'Setting to …
Run Code Online (Sandbox Code Playgroud)

java-native-interface android android-ndk

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

辅助功能:对讲,WebView和用户的语言环境

我开发了一个包含Webview的应用程序.我想让我的应用程序完全可访问,因此对于webview元素,我希望TalkBack以完全可访问的方式读取诸如"标题","横幅","EditText"等html元素.

我已经看到WebView中的TTS过程是通过Chromium AccessibilityInjector.java类通过JS注入完成的.这会将此脚本注入到页面中,该页面仅包含英文消息.结果是当设备使用另一种语言时,TTS会用英语读取这些html元素.

现在我无法调试或扩展chrome webclient,那么如何根据用户的语言环境使TTS读取我的页面?

编辑:顺便说一句,我正在使用jQuery Mobile.

android webview

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

处理WPF用户控件的事件

我有一个带有几个按钮的用户控件,根据使用它的类需要采取不同的操作.

问题是我不知道如何实现这些处理程序,因为当从最终应用程序使用我的用户控件时,我没有直接访问按钮来指定哪个处理程序处理哪些事件.

你会怎么做?

c# wpf events user-controls

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

具有产品风格和Kotlin的ClassNotFoundException

我有一个主要在Kotlin中编写的项目,但是有一些java类.项目现在已经很先进了,我想增加在不同环境之间切换的可能性,我使用了这些环境:

 productFlavors {
        prod {
            dimension "default"
            buildConfigField 'boolean', 'FABRIC', 'true'
            applicationId = "com.myapp"
        }

        beta {
            dimension "default"
            buildConfigField 'boolean', 'FABRIC', 'true'
            applicationId = "com.myapp.beta"
        }

        dev {
            dimension "default"
            buildConfigField 'boolean', 'FABRIC', 'false'
            applicationId = "com.myapp.dev"
        }

    }
Run Code Online (Sandbox Code Playgroud)

但是,当我运行非生产的风格(不改变applicationId)时,我得到一个java类的ClassDefNotFoundException:

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.myapp.beta.ui.view.ScrollBehavior" on path: DexPathList[[zip file "/data/app/com.myapp.beta-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp.beta-1/lib/arm64, /system/lib64, /vendor/lib64]]
   at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    ... 33 more
Run Code Online (Sandbox Code Playgroud)

我正在使用Android Studio 3.0 beta 4和Kotlin插件版本1.1.3-2.

构建文件:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply …
Run Code Online (Sandbox Code Playgroud)

java android kotlin

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

复制Zip条目MultiDex.class

我有一个Android应用程序刚刚超过方法限制,所以我尝试启用multidex.一旦我这样做,我得到以下错误:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithMultidexlistForProdDebug'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63)
    at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
    at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: java.lang.RuntimeException: java.io.IOException: Can't write [/Users/user/dev/myapp/app/build/intermediates/multi-dex/prod/debug/componentClasses.jar] (Can't read [/Users/user/dev/myapp/app/build/intermediates/transforms/desugar/prod/debug/65.jar(;;;;;;**.class)] (Duplicate zip entry [65.jar:android/support/multidex/MultiDex.class]))
    at com.android.builder.profile.Recorder$Block.handleException(Recorder.java:55)
    at …
Run Code Online (Sandbox Code Playgroud)

android proguard android-multidex

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

布局宽度和高度被忽略

我有一个内部布局和SurfaceTexture视频流的对话框.当我收到视频widthheight视频时,我会调整我的布局:

private void resizeView(final VideoFormatInfo info) {
        final Size size = calculateSize(info.getWidth(), info.getHeight());
        mActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {

                final ViewGroup.LayoutParams layoutParams = mInnerLayout.getLayoutParams();
                layoutParams.width = size.x;
                layoutParams.height = size.y;
                Log.i(TAG, String.format("run: setting innerlayout bounds to %d,%d", size.x, size.y));
                mInnerLayout.setLayoutParams(layoutParams);
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

现在我有一个全屏按钮,应该将布局调整到整个屏幕.但是当我按下它时,布局仍然在屏幕的一个小区域内.

当我检查日志中正确的值size.xsize.y是否(屏幕的边界),但布局没有正确调整大小.

innerlayout被添加到名为"VideoPlayer"的customView中.我将视频播放器背景的颜色设置为红色,因此当我切换到全屏时,整个屏幕变为红色,除了中间的视频流.这意味着底层视图正在适当调整大小,但innerLayout不是出于某种原因.

有趣的是,我在视频渲染上有另一种布局,可以创建"闪光效果"来模拟拍摄快照时的相机闪光.触发该闪光效果后,视频将调整为整个屏幕.

所以这是我的布局树:

VideoPlayerView (CustomView, not VideoView)
     innerLayout (RelativeLayout)
         videoSurfaceTexture (SurfaceTextureView)
         flashLayout (RelativeLayout)
Run Code Online (Sandbox Code Playgroud)

我也将其设置为调试:

 @Override
            public void onSurfaceTextureSizeChanged(final SurfaceTexture surfaceTexture, final int width, …
Run Code Online (Sandbox Code Playgroud)

layout android

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

咖啡计数元素

在Espresso中是否可以对具有特定ID的元素进行计数?

我可以,onView(withId(R.id.my_id))但后来我被困住了。

我有一个LinearLayout,可以在其中注入元素(而不是ListView),并且我想测试有多少个元素以检查它们是否符合预期的行为。

android android-espresso

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

RTMP自适应比特率算法

我在网上搜索但是关于这个的信息非常少.

我有一个实时广播应用程序,我通过RTMP堆栈使用Android MediaCodec SDK发送由摄像头和麦克风产生的编码H264视频帧和AAC音频块.

我的直播流是720p,我的目标是2500Kbps的高质量.这显然需要非常好的网络连接,如果您使用数据计划,这意味着4G.

问题是即使连接最大,也会出现低峰值和拥塞,因此网络将无法保持如此沉重的流量.因为我想提供高可靠性,我想在我的应用程序中包含自动自适应比特率,以便降低图像质量或有利于可靠性.

问题是 - 如何实现这种自动适应网络条件而不丢失帧?它甚至可能吗?我使用像Cerevo这样的专业编码设备,他们不会丢帧 - 但是对于我的应用程序,由于p帧在网络中丢失,我总是会受到一些可怕的拖累.

这就是我目前拥有的:

private long adaptBitrate(long idleNanos, Frame frame) {
        int bytes = frame.getSize();
        long nowNanos = System.nanoTime();
        if (nowNanos - mLastNanos > 1000L * 1000 * 1000) {
            double idle = (double) idleNanos / (double) (nowNanos - mLastNanos);
            float actualBitrate = newBitrate;

            int size = mBuffer.size();
            String s = "Bitrate: " + actualBitrate / 1000
                    + " kbps In-Flight:" + bytes
                    + " idle: " + idle;
            if …
Run Code Online (Sandbox Code Playgroud)

streaming android rtmp mediacodec

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