【问题标题】:Problem with Switch buttons on RecyclerViewRecyclerView 上的开关按钮问题
【发布时间】:2022-05-04 23:27:38
【问题描述】:

我对 Android 开发有点陌生,希望您能帮助我。我有一个 RecyclerView,每个卡片视图显示一个图像、两个文本视图和一个切换按钮。这个应用程序是为我自己准备的,我想组织我的卡片收藏,所以开关在那里让我知道我是否有卡片,所以我想用 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 上使用的还是什么?

【问题讨论】:

  • 可能存在 id switch1 但在另一个布局中与您定义它的布局不同。
  • 请在此处提供您的适配器代码 :)
  • 'aSwitch' 出于某种原因为空。这可能是因为 R.id.switch1 在您膨胀的布局中不存在。
  • 按钮不在那个布局中,如果我有 recyclerview,这就是活动,然后我得到 item_layout,如果我有带有 Switch 按钮的 cardView。那么,即使不想使用,也需要在activity_layout上实现一个Switch按钮?
  • 能把recyclerview的适配器的完整代码放上来

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


【解决方案1】:
@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`
}

【讨论】:

    【解决方案2】:

    你可以试试这个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()
                }
            }
        }
    });
    

    希望它会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多