小编Ban*_*ana的帖子

Kotlin:延迟到val,或者是一个可以设置一次的var

只是好奇:在Kotlin中,我很想得到一些可以通过懒惰来初始化的val,但是有一个参数.那是因为我需要为了初始化它而创建的东西很晚.

具体来说,我希望我有:

private lateinit val controlObj:SomeView
Run Code Online (Sandbox Code Playgroud)

要么:

private val controlObj:SomeView by lazy { view:View->view.findViewById(...)}
Run Code Online (Sandbox Code Playgroud)

然后:

override fun onCreateView(....) {
    val view = inflate(....)


    controlObj = view.findViewById(...)
Run Code Online (Sandbox Code Playgroud)

或在第二种情况下controlObj.initWith(view)或类似的情况:

return view
Run Code Online (Sandbox Code Playgroud)

我无法使用,by lazy因为by lazy初始化时不会接受外部参数.在这个例子中 - 包含view.

当然我有,lateinit var但如果我能确保它在设置后变为只读,我会在一行中完成它会很好.

是否有一种非常干净的方法来创建只读初始化一次的只读变量,但只有当其他变量出生时?任何init once关键字?在init之后,编译器知道它是不可变的?

我知道这里存在潜在的并发问题,但如果我敢于在init之前访问它,我当然应该被抛出.

android immutability lazy-evaluation kotlin kotlin-lateinit

18
推荐指数
3
解决办法
6845
查看次数

为什么FLAG_ACTIVITY_CLEAR_TOP不起作用?

正如标题所说,为什么intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)不会有效?

我有3个活动让我们说A,B和C.

当我尝试使用代码从C启动活动A时:

Intent i = new Intent(this, A.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

它只是启动活动A但不清除顶部.-_-

我也试过用setFlags().

我在这个问题上阅读了关于SO的不同问题,但我找不到正确的答案.> _ <

有人请帮忙!

编辑

@codeMagic请求的活动'A'中onBackPressed()的代码.

@Override
public void onBackPressed(){
    if(wvLogin.canGoBack())
        wvLogin.goBack();
    else
        super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)

android android-intent android-activity

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

枚举在 WebAPI 中返回字符串值

我在我的 Web API 项目中遇到了一段代码,它有一个这样结构的类:

public class QuestionDto
{
    public bool disabled {get;set;}
    public int id {get;set;}
    public int order {get;set;}
    public PositionDto pagePosition {get;set;}
    public string title {get;set;}
}

public enum PositionDto
{
    FullWidth = 0,
    Half = 1
}
Run Code Online (Sandbox Code Playgroud)

有一个 API 调用返回QuestionDto,如下:

[Route("")]
[HttpGet]
[ResponseType(typeof(QuestionDto))]
public async Task<IHttpActionResult> GetCategoryQuestions()
{
    return Ok(new QuestionDto { PagePosition = PagePositionDto.Half });
}
Run Code Online (Sandbox Code Playgroud)

这是 Chrome 控制台网络选项卡中的一个片段,显示了此 API 调用的响应:

在此处输入图片说明

枚举如何返回它的文本值,而不是它的 int 值?

为了进一步混淆这一点,如果我然后采用相同的类结构并将其复制并粘贴到不同的项目,则返回此对象的 api 调用将返回 int 值 - 这正是我所期望的。

那么第一个项目可以返回字符串值吗?

是否有一些设置可以使此枚举返回其字符串值?

c# enums asp.net-web-api

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

为什么std :: exception在std :: bad_alloc之前捕获我的异常?

问题:我使用std :: exception和std :: bad_alloc来捕获异常.我正在使用的try catch的顺序有问题.我附上了示例代码以供参考.

预期:如果我的错误是bad_alloc,则抛出bad_alloc异常.

观察:我的错误是bad_alloc,但抛出了异常.

示例代码:

#include "stdafx.h"
#include <iostream>
#include <exception>

using namespace std;

void goesWrong()
{
    bool error1Detected = true;
    bool error2Detected = false;

    if (error1Detected)
    {
        throw bad_alloc();
    }

    if (error2Detected)
    {
         throw exception();
    }
}

int main()
{
    try
    {
        goesWrong();
    }
    catch (exception &e)
    {
        cout << "Catching exception: " << e.what() << endl;
    } 
    catch (bad_alloc &e)
    {
        cout << "Catching bad_alloc: " << e.what() << endl; …
Run Code Online (Sandbox Code Playgroud)

c++ exception

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

可折叠工具栏 - 在Android中使片段页脚始终可见

我正在创建一个具有ProfilePage的应用程序,其中包含三个片段 - 关于| 帖子| 画廊,我正在使用带有用户图像的可折叠工具栏.我的第二个和第三个片段将有一个应始终可见的页脚,但这是我得到的:

在此输入图像描述 在此输入图像描述

当我的图像被展开时,页脚会消失.我想要的是我的两个片段让这些页脚始终可见,而不是依赖于工具栏是否折叠.我的画廊页脚应该类似于帖子页脚.

profile_layout.xml:

<?xml version="1.0" encoding="utf-8"?>

<android.support.design.widget.CoordinatorLayout    
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:id="@+id/main_content"
   android:layout_width="match_parent"
   android:layout_height="match_parent">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="256dp"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        contentScrim="?attr/colorPrimary"
        android:layout_height="match_parent"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <ImageView
            android:id="@+id/profile_image"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            android:scaleType="centerCrop"
            android:contentDescription="@string/profile_photo"
            app:layout_collapseMode="none"/>

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_collapseMode="pin">

            <ImageView
                android:id="@+id/toolbarEdit"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="end"
                android:contentDescription="@string/block"
                android:paddingEnd="20dp"
                android:paddingStart="5dp"
                app:srcCompat="@drawable/ic_icon_edit" />
        </android.support.v7.widget.Toolbar>

    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <android.support.design.widget.TabLayout
        android:id="@+id/myProfileTabs"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:layout_gravity="bottom"
        app:tabContentStart="72dp"
        app:tabGravity="fill"
        app:tabMode="scrollable" />

    <android.support.v4.view.ViewPager
        android:id="@+id/myProfileViewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

posts_fragment.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" …
Run Code Online (Sandbox Code Playgroud)

xml android android-fragments android-coordinatorlayout android-collapsingtoolbarlayout

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

Datepicker和timepicker - 设置最大值和最小值

我想做一个类似提醒应用程序的东西.我想允许用户选择现在不是的日期和时间(至少从现在起5分钟),我还想禁止用户选择距离太远的日期 - 例如30天.我创建了datePicker和timePicker,使它们在按钮点击时弹出,但找不到设置最小值和最大值的方法.

 public void showDateDialog() {
 btnDate = (Button) findViewById(R.id.buttonDate);

    btnDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showDialog(DATE_DIALOG_ID);
        }
    });
}
    public void showTimeDialog() {
    btnTime = (Button) findViewById(R.id.buttonTime);

    btnTime.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showDialog(TIME_DIALOG_ID);
        }
    });
}
@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
        case DATE_DIALOG_ID:
            // create a new DatePickerDialog with values you want to show
            return new DatePickerDialog(this, datePickerListener, yearSet, monthSet, daySet);
        // create a new TimePickerDialog with …
Run Code Online (Sandbox Code Playgroud)

java android datepicker timepicker

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

从源 *** 获取 *** 的访问已被 CORS 策略阻止:没有“访问控制允许源”

我有错误

从源 ' http://localhost:3000 '获取在 ' http://localhost:5000/admin/authenticate '的访问已被 CORS 策略阻止:没有 'Access-Control-Allow-Origin' 标头存在于请求的资源。如果不透明响应满足您的需求,请将请求的模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。

我的 ApiManager

function login(username, password) {
    const requestOptions = {
        method: 'POST',
        headers: {    
            'Accept': 'application/json',
            'Content-Type': 'application/json',
            'Access-Control-Allow-Origin': '*' },
        body: JSON.stringify({ username, password })};

    return fetch(`http://localhost:5000/admin/authenticate`, requestOptions)
        .then(handleResponse)
        .then(user => {
            // store user details and jwt token in local storage to keep user logged in between page refreshes
            localStorage.setItem('user', JSON.stringify(user));
            return user;
        }
    );
}
Run Code Online (Sandbox Code Playgroud)

在后端 Asp.Net Core 2.2 (Startup.cs) 中,我写道:

services.AddCors(options => …
Run Code Online (Sandbox Code Playgroud)

javascript c# asp.net api reactjs

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

在Vector Drawable中擦除可绘制图像

在这里找到了这个矢量可绘制资源.我想要做的是翻转它,使X在另一边.

我设法在布局中执行此操作,就像在此示例中添加: android:scaleX="-1" 到我的ImageView并且它可以工作.

现在我想直接在Vector Drawable中更改它,但是当我尝试下面的代码时它是不可见的.

account_remove.xml:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24"
    android:viewportWidth="24">

    <group
        android:name="rotationGroup"
        android:scaleX="-1" >

        <path
            android:fillColor="#FFFFFF"
            android:pathData="M15,14C17.67,14 23,15.33 23,18V20H7V18C7,15.33 12.33,14 15,14M15,12A4,4 0 0,1 11,8A4,4 0 0,1 15,4A4,4 0 0,1 19,8A4,4 0 0,1 15,12M5,9.59L7.12,7.46L8.54,8.88L6.41,11L8.54,13.12L7.12,14.54L5,12.41L2.88,14.54L1.46,13.12L3.59,11L1.46,8.88L2.88,7.46L5,9.59Z" />
    </group>
</vector>
Run Code Online (Sandbox Code Playgroud)

当我添加:

android:pivotX="10.0"
android:pivotY="10.0"
Run Code Online (Sandbox Code Playgroud)

到我的rotationGroup,它向右倾斜.

我应该将哪些值添加到我的rotationGroup以使其正常工作?

xml android drawable android-drawable android-vectordrawable

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

Android中的模糊SVG图片

我从网站添加了一个用户svg图像。图像应该清晰,但是当我在应用程序中将其用作默认用户图像时,图像非常模糊。

<!-- Thumbnail Image -->
<com.android.volley.toolbox.NetworkImageView
   android:id="@+id/thumbnail"
   android:background="@drawable/ic_icon_user"
   android:layout_width="80dp"
   android:layout_height="80dp"
   android:layout_alignParentLeft="true"
   android:layout_marginRight="8dp" />
Run Code Online (Sandbox Code Playgroud)

另外我将如何在android中编辑svg图像颜色。我尝试添加自定义颜色,但是没有用。

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24"
    android:viewportWidth="24">
       <path
            android:fillColor="@color/ColorRed"
            android:pathData="M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z" />
</vector>
Run Code Online (Sandbox Code Playgroud)

java svg android vector android-xml

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

如何解决可能的剪切和粘贴错误。

Android Studio中的参考ID错误。它表明此方法已经查找了id。我给了与代码中使用的ID名称相同的名称,但是它不起作用。我已经尝试过链接ID并重用它,但是它显示了相同的错误。请需要帮助。错误消息图像在超级链接中。

错误信息

这是我的代码

public class SignUp extends AppCompatActivity implements View.OnClickListener {

    Button btnSignup;
    TextView btnLogin,btnForgotPass;
    EditText input_email,input_pass;
    RelativeLayout activity_sign_up;

    private FirebaseAuth auth;
    Snackbar snackbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sign_up);

        //View
        btnSignup = (Button)findViewById(R.id.signup_btn_register);
        btnLogin = (TextView)findViewById(R.id.signup_btn_login);
        btnForgotPass = (TextView)findViewById(R.id.signup_btn_forgot_pass);
        input_email = (EditText)findViewById(R.id.signup_email);
        input_pass = (EditText)findViewById(R.id.signup_password);
        activity_sign_up = (RelativeLayout)findViewById(R.id.activity_sign_up);
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-layout

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