RecyclerView上的“开关”按钮问题:已解决

时间:2019-10-01 10:59:05

标签: android android-recyclerview grid-layout android-switch

我是Android开发的新手,希望您能为我提供帮助。我有一个RecyclerView,每个cardview显示一张图像,两个text视图和一个switch按钮。这个应用程式适合我自己使用,我想整理我的卡片收藏,因此可以通过开关让我知道我是否有卡片,因此我想将数据库更新为1(如果选中),或者将数据库更新为0(如果已选中)。不。我试图用一些Toast测试按钮,但出现错误。这里的代码:

aSwitch = (Switch) findViewById(R.id.switch1);
aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
          if (isChecked == true) {
               Toast.makeText(StockActivity.this, "On", Toast.LENGTH_SHORT).show();
          } else {
               Toast.makeText(StockActivity.this, "Off", Toast.LENGTH_SHORT).show();
          }
    }
});

这是我的“切换”按钮代码,我认为还可以,但是出现错误:

  

java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.battlespiritsdb / com.example.battlespiritsdb.StockActivity}:java.lang.NullPointerException:尝试调用虚拟方法'void android.widget.Switch.setOnCheckedChangeListener (android.widget.CompoundButton $ OnCheckedChangeListener)'引用空对象

错误指向setOnCheckedChangeListener的第一行,我不知道为什么,是因为我在RecyclerView上使用它们吗?

感谢您的帮助!

PS:这很好,我只是意识到我在错误的类上使用了它,所以就像你们中的某些人所说的那样,切换按钮一直指向空对象。谢谢您的帮助!我有一天会停止犯这些菜鸟错误……

2 个答案:

答案 0 :(得分:0)

@Kinda --Try This code
sw1 = (Switch)findViewById(R.id.switch1);
        sw2 = (Switch)findViewById(R.id.switch2);
        btnGet = (Button)findViewById(R.id.getBtn);
        btnGet.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String str1, str2;
                if (sw1.isChecked())
                    str1 = sw1.getTextOn().toString();
                else
                    str1 = sw1.getTextOff().toString();
                if (sw2.isChecked())
                    str2 = sw2.getTextOn().toString();
                else
                    str2 = sw2.getTextOff().toString();
                Toast.makeText(getApplicationContext(), "Switch1 -  " + str1 + " \n" + "Switch2 - " + str2,Toast.LENGTH_SHORT).show();
            }
        });
    }`enter code here`
}

答案 1 :(得分:0)

您可以尝试这段snippet代码。

switchButton = (Switch) findViewById(R.id.switch1);
switchButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
    {

            if (isChecked) {
                 // if 'isChecked' is true do whatever you need...
                 // To show a toast use only 'this' (for activity) or 'getActivity()'
                 // (for fragment) nothing else.
                 Toast.makeText(this, "On", Toast.LENGTH_SHORT).show(); // or getActvity()
            } else {
                 Toast.makeText(this, "Off", Toast.LENGTH_SHORT).show(); // or getActvity()
            }
        }
    }
});

希望这会有所帮助。