小编Mat*_*Mak的帖子

ViewPager中的Android ScrollView - 如何使刷卡更有效率

我正在开发我已经有ViewPager的应用程序,其中我有ScrollView包含TextView.一切正常,但是当我试图滚动ViewPager时,我必须"画"绝对水平线来刷页面.否则,如果绘制的线不是完全水平的,它将交换ScrollView.

这是我试图解释我的问题的图像.红线代表用户的滑动.

在此输入图像描述

如您所见,最后一个不会滑动ViewPager,而是ScrollView.而且有问题.当您用一只手握住手机时,您正在使用拇指滑动,这意味着您没有绘制完美的水平线,而是与上一个Nexus上显示的线类似的线.所以我的问题是 - 如何提高刷卡效率以改善用户体验?

这是我正在使用的一些代码:

fragment.xml之

<android.support.v4.view.ViewPager
    android:id="@+id/view_pager"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/divider"
    android:paddingBottom="16dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="16dp" >

</android.support.v4.view.ViewPager>
Run Code Online (Sandbox Code Playgroud)

CustomPagerAdapter.java

ScrollView scroll;
TextView text;

@Override
public Object instantiateItem(ViewGroup container, int position) {
    //Adding scrollview
    scroll = new ScrollView(context);

    //Creating TextView 
    text = new TextView(context);
    text.setText(stringArray[position]);
    text.setTextAppearance(context, android.R.style.TextAppearance_Medium);

    //Adding TextView to ScrollView     
    scroll.addView(text, 0);

    //Adding ScrollView to ViewPager
    ((ViewPager) container).addView(scroll, 0);

    return scroll;
}
Run Code Online (Sandbox Code Playgroud)

Fragment.java

CustomPagerAdapter adapter;
ViewPager pager;

...


    ///Set adapter
    adapter = new CustomPagerAdapter(getActivity().getApplicationContext(), stringArray);
    }
    pager.setAdapter(adapter);


    //Set onPagerChanger …
Run Code Online (Sandbox Code Playgroud)

android scrollview swipe android-viewpager

7
推荐指数
0
解决办法
1066
查看次数

Laravel 5.6-会话过期后无法持久

我的两个本地环境存在一个非常奇怪的问题。由于未刷新太长时间,会话过期后,将按预期创建新会话。但是,如果我在公共站点(不受Auth保护)上浏览,则该会话将不会持续,并且每次获取/发布请求都将被忽略,并会创建一个新会话(我可以在XRSF令牌上看到它以及在存储/框架中创建的新文件)。

以下是一些方案:

  1. 如果没有用户登录,则一切正常。

  2. 如果管理员用户已登录(选中“记住我”),但公共用户未登录,则访问任何公共(不受保护的)路由(使用默认web中间件)将如上所述重新创建会话。但是,一旦我在中间件软件下访问任何路由adminweb中间件+身份验证检查),会话就会停滞,此后,公用路由的问题就会消失。

  3. 如果两个用户都登录并且我访问了任何受保护的路由,则会话将立即阻塞。

我尝试了以下操作,但没有成功:

  • 阅读并尝试其他线程的建议
  • 删除所有缓存
  • 重新安装了XAMPP
  • 尝试了不同的浏览器(Chrome,Edge和全新安装的Firefox的结果相同)
  • 设置SESSION_DOMAIN-这实际上破坏了Edge,会话完全停止工作
  • 删除网站的Cookie
  • 更改了APP_URL和APP_NAME
  • 已尝试用于会话的文件和数据库驱动程序
  • 通过VHost(例如http:// mySite /)和php artisan服务器使用XAMPP访问网站
  • 确保web中间件不会两次应用于任何路由

解决问题的原因:

  • 访问受保护的页面
  • 删除cookie
  • 重新打开浏览器

我重现该问题的环境:

  1. 我的电脑

    • Windows 10 Pro x64,内部版本1709
    • PHP 7.2.0(XAMPP)
  2. 我的笔记本电脑

    • Windows 10 Pro x64,内部版本1803
    • PHP 7.2.7(XAMPP)
  3. 同事的笔记本电脑

    • macOS High Sierra 10.13.6
    • PHP 7.2.1(MAMP)

什么可能不会导致问题:

  • 文件权限
  • 我的Laravel配置(当我尝试了类似线程中的许多建议时)
  • XAMPP或MAMP
  • 操作系统

可能导致此问题的原因:

  • Cookies(尽管我不知道如何)
  • PHP设置
  • Laravel(鉴于在给定情况下的怪异行为,我尚不能排除此选项)

以下是一些可能对您有用的文件:

.env

APP_NAME=MySite
APP_ENV=local
APP_KEY=base64:dEoI03jGqlhIZS4om6sx7j7aFMmKEweJpN72PijsCTQ=
APP_DEBUG=true
APP_URL=http://mySite

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=mySite
DB_USERNAME=root
DB_PASSWORD=password

BROADCAST_DRIVER=log
CACHE_DRIVER=file …
Run Code Online (Sandbox Code Playgroud)

xampp session laravel laravel-5 laravel-5.6

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

Android ListView项目动画 - 仅动画第一个可见项目

我正在尝试重现此ListView项目:

http://material-design.storage.googleapis.com/videos/components-progressandactivity-progressandactivity-2-drive.mobile-load.folders_large_xhdpi.webm

我已成功使用这些代码行(不计算动画xml文件)来实现它:

//Set animation
    if(position > lastAnimPosition){
        lastAnimPosition = position;

        Animation anim = AnimationUtils.loadAnimation(context, R.anim.item_slide_in);
        anim.setStartOffset(50 * position);
        row.startAnimation(anim);
    }
Run Code Online (Sandbox Code Playgroud)

所以动画很好,但是当我向下滚动时,有偏移的问题 - 它只是巨大的,它给人的感觉就像应用程序加载项目太久了.我需要做的是找出何时应该禁用偏移量 - 或者如何仅为第一个显示的项目启用偏移量.

animation android listview offset

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

在中间件中更改 OWIN Request.Body

我想为 API 调用实现自定义加密中间件。首先,我读取请求正文 ( IOwinContext.Request.Body) 和标头 (Encryption-Key & Signature)。然后,我解密请求正文,它给了我纯 json 字符串。现在是棘手的部分:我想将这个 json 写回IOwinContextRequest.Body,以便它可以反序列化为对象,然后作为 Controller 方法的参数传递。这是我所做的:

启动:

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.Use(typeof(EncryptionMiddleware));

        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

中间件:

public class EncryptionMiddleware : OwinMiddleware
{
    public EncryptionMiddleware(OwinMiddleware next) : base(next)
    {
        //
    }

    public async override Task Invoke(IOwinContext context)
    {
        var request = context.Request;
        string json = GetDecryptedJson(context);
        MemoryStream stream = new MemoryStream();
        stream.Write(json, 0, json.Length);
        request.Headers["Content-Lenght"] = json.Lenght.ToString();
        request.Body = stream;
        await Next.Invoke(context);
    } …
Run Code Online (Sandbox Code Playgroud)

c# owin asp.net-web-api2 owin-middleware

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

C - 即使他应该进入也不进入

我现在很生气.我需要比较一个字符串和第二个字符串,当第二个字符串的字符可以以某种方式创建第一个字符串.例


foo1 =账单

foo2 = boril

foo2可以创建foo1,因为它包含来自foo1的所有字母.


所以这是我的计划:

秘密=宗教

lettersGuessed = religonvpst

for(i = 0; i < lenSecret; i++){  
    for(l = 0; l < lenGuessed; l++)
        printf("A: %c, B: %c, C: %d\n", secret[i], lettersGuessed[l], count);
        if(secret[i] == lettersGuessed[l]){
            printf("HI\n");
            count++;
            break;
        }
        printf("C: %d\n", count);
}
Run Code Online (Sandbox Code Playgroud)

但变量计数始终保持为0.这是从控制台输出:

http://pastebin.com/YrHiNLNi

正如你从头开始看到的那样,当secret [i] == lettersGuessed [l] in if应该返回true(1)时,它返回false(0).这有什么问题?为什么它不起作用?

c if-statement compare char

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