用 Snackbar 内部类替换 Toast

Posted

技术标签:

【中文标题】用 Snackbar 内部类替换 Toast【英文标题】:Replace Toast with Snackbar inner Class 【发布时间】:2016-12-29 08:14:30 【问题描述】:

我们想在下面的代码中用 Snackbar 替换这个 Toast 我尝试了各种配置,结果接近但没有奖品 我最好的配置不会在 make Snackbar 中接受 LENGTH_SHORT

有人可以解释在哪里放置 Snackbar 代码以及为什么不接受 LENGTH_SHORT 吗?

    private void addListenerOnButton_ADD() 
    btnAdd.setOnClickListener(new View.OnClickListener() 

        @Override
        public void onClick(View view) 

            if(ETinput.getText().length()==0)
                Toast.makeText(MainActivity.this,"Enter a Value",Toast.LENGTH_SHORT).show();
                // REMOVE THIS Toast and insert Snackbar
                //======================================
                return;
            
                    ......

        
    );

这里是编辑

    private void addListenerOnButton_ADD(final AlteredCharSequence Snackbar) 
    btnAdd.setOnClickListener(new View.OnClickListener() 

        @Override
        public void onClick(View view) 

            if(ETinput.getText().length()==0)
                Toast.makeText(MainActivity.this,"Enter a Value",Toast.LENGTH_SHORT).show();
                // REMOVE THIS Toast and insert Snackbar
                //======================================
                Snackbar.make(findViewById(android.R.id.content), "Had a snack at Snackbar", Snackbar.LENGTH_LONG)
                        .setActionTextColor( Color.RED)
                        .show();
                return;
            

            int Y = Integer.valueOf(ETinput.getText().toString().trim());
            int Z = Y + X;
            ETans.setText(String.valueOf(Z));

            //float Y = Float.valueOf(ETinput.getText().toString().trim());
            //float Z = Y + X;
            //ETans.setText(String.valueOf(Z));
        
    );

【问题讨论】:

请展示你是如何实现它的(Snackbar),以展示如何修复它 你到底尝试了什么?,一些代码可能是你试图生成 Snackbar 的代码 @James_Duh,编辑您的原始帖子添加您的新代码。同时显示初始化视图变量的代码。 @Gary Bak 这个编辑不会让 LENGTH_LONG 函数它也改变这个语句 addListenerOnButton_ADD(Snackbar); final AlteredCharSequence Snackbar 的意义何在?将参数名称从 Snackbar 更改为 charSequence 【参考方案1】:

使用这个

Snackbar snackbar;

btnAdd.setOnClickListener(new View.OnClickListener() 

        @Override
        public void onClick(View view) 
            snackbar = Snackbar.make(view, "Enter a Value", Snackbar.LENGTH_LONG);
            if(ETinput.getText().length()==0)



    snackbar.show();

  return;
            
                    ......

        
    );

如果你想要持续时间 INDEFINITE 并且想要关闭时,请使用 Snackbar.LENGTH_INDEFINITE snackbar.dismiss();

【讨论】:

此配置仍然存在任何其他想法的错误 这个答案很模糊,它没有试图解释提到的“视图”变量是 SnackBar 的基本视图所必需的。这个视图变量必须设置,可能作为一个类成员,并在创建快餐栏之前初始化。 @Vishwesh Jainkuniya IDE 想要我创建 CLASS 或 INNER CLASS 或 INTERFACE 以及 View 视图在下面声明,因此 make 中的视图将无效 null 或只是未使用【参考方案2】:

使用setOnClickListener 中的view 作为Snackbar.make 方法的第一个参数:

private void addListenerOnButton_ADD(final AlteredCharSequence Snackbar) 
    btnAdd.setOnClickListener(new View.OnClickListener() 

        @Override
        public void onClick(View view) 

            if(ETinput.getText().length()==0)
                Snackbar.make(view, "Enter a Value", Snackbar.LENGTH_SHORT).setAction("Action", null).show();
                return;
            

            int Y = Integer.valueOf(ETinput.getText().toString().trim());
            int Z = Y + X;
            ETans.setText(String.valueOf(Z));

            //float Y = Float.valueOf(ETinput.getText().toString().trim());
            //float Z = Y + X;
            //ETans.setText(String.valueOf(Z));
        
    );

【讨论】:

你的配置仍然给我 LENGTH_LONG IDE 告诉我无法解析符号我不想说这正在成为一个主要的痛苦为什么这如此困难 你能把你的 build.gradle 文件(模块:app)的依赖代码发给我吗? IDE 建议创建类创建内部类或重命名引用或引入局部变量并且 LENGTH_LONG 保持红色 dependencies compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:24.2.0' compile files('libs /junit-4.12.jar') 编译'com.google.android.gms:play-services-appindexing:9.4.0' 尝试添加我错过了 compile 'com.android.support:design:23.4.0'

以上是关于用 Snackbar 内部类替换 Toast的主要内容,如果未能解决你的问题,请参考以下文章

kotlin中匿名内部类的写法

kotlin中匿名内部类的写法

从服务内部显示 Snackbar

关于SnackBar被键盘挡住的解决方案

Snackbar使用详解及其相关框架TSnackbar

打开 SnackBar 内部函数发送到 AppBar