java - 在 setOnCheckedChangeListener 方法内执行 Toast 消息

标签 java android actionlistener toast

我有一系列切换按钮。切换按钮与游标中的行数之间存在 1 比 1 的比例。我将 setId() 分配给数组中的每个切换按钮,并使用光标返回的数据。

我的更新总是更新光标中的 1 行,我正在尝试使用一些 toast 消息来解决此问题。问题是我无法显示 toast 消息。我知道该方法是监听器正在触发,因为我的 sql 更新正在运行,只是它是错误的行。这是我的代码。

toggleButton[i].setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
        {
            ContentValues values = new ContentValues(); //Create the new content values object for data input
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
            {
                if(isChecked)
                {
                    Toast.makeText(Cart.this.getBaseContext(), "hello", Toast.LENGTH_SHORT).show();
                    toggleButton[buttonView.getId()].setTextOn("Yes"); //Set the text when the button changes state to on
                    values.put(Contract.ItemsTable.COLUMN_ONE, 1); //Update the record on the 'status' column to true
                    String[] itemId = {String.valueOf(buttonView.getId())}; //
                    db.update(Contract.ItemsTable.TABLE_NAME, values, SmartCartContract.ItemsTable.COLUMN_ITEM_ID + " LIKE ?", itemId); //Update the DB record
                } else
                {
                    Toast.makeText(Cart.this.getBaseContext(), "hello", Toast.LENGTH_SHORT).show();
                    toggleButton[buttonView.getId()].setTextOff("No"); //Set the text when the button changes state to off
                    values.put(SmartCartContract.ItemsTable.COLUMN_TWO, 0); //Update the record on the 'status' column to false
                    String[] itemId = {String.valueOf(buttonView.getId())}; //
                    db.update(Contract.ItemsTable.TABLE_NAME, values, Contract.ItemsTable.COLUMN_ITEM_ID + " LIKE ?", itemId); //Update the DB record
                }
            }
        });

Cart.this.getBaseContext() 是我对我见过的使用选项的最后一次尝试。这是我做错了吗?

我正在动态构建这些按钮:

toggleButton[i] = new ToggleButton(this); //Create new ToggleButton control for this row    
toggleButton[i].setGravity(Gravity.CENTER); //Align the text in the middle 
toggleButton[i].setId(cursor.getInt(cursor.getColumnIndex("itemId"))); 
if (cursor.getInt(cursor.getColumnIndex("itemInCart")) == 1) //Check if marked 'in Cart'

最佳答案

不确定数据库的问题是什么,但这里是一些带有工作Toast的ToggleButtons的最小示例。

public class CartActivity extends AppCompatActivity {

    private CompoundButton.OnCheckedChangeListener listener = new CompoundButton.OnCheckedChangeListener() {

        ContentValues cv;

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            cv = new ContentValues();
            String key;
            int val;

            if (isChecked) {
                key = "col1";
                val = 1;
            } else {
                key = "col2";
                val = 0;
            }

            cv.put(key, val);
            String[] itemId = {String.valueOf(buttonView.getId())};
            Toast.makeText(CartActivity.this,
                    String.format("[%d] %s {%s}", buttonView.getId(), isChecked, cv),
                    Toast.LENGTH_SHORT).show();
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout view = new LinearLayout(this);
        view.setOrientation(LinearLayout.VERTICAL);

        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        ToggleButton[] buttons = new ToggleButton[3];
        for (int i = 0; i < buttons.length; i++) {
            ToggleButton toggle = new ToggleButton(this);

            toggle.setLayoutParams(lp);
            toggle.setId(i);
            toggle.setGravity(Gravity.CENTER);            
            toggle.setTextOn(String.format("On [%d]", i));
            toggle.setTextOff(String.format("Off [%d]", i));
            toggle.setChecked(false);
            toggle.setOnCheckedChangeListener(listener);

            buttons[i] = toggle;
            view.addView(toggle);
        }

        setContentView(view);
    }
}

关于java - 在 setOnCheckedChangeListener 方法内执行 Toast 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37604180/

相关文章:

java - 导入com.googlecode.javacpp.BytePointer无法在hadoop上运行

java - 在 OpenGL ES 2.0 中使用多个纹理

java - 将 GUI 组件声明为字段是否有特定原因? ActionListener 也应该是匿名的吗?

android - 所有数据都应该通过 ContentProviders 公开吗?

android - 避免使用多进程和应用程序 onCreate 崩溃

java - JButton ActionListener 不起作用(在 Eclipse 插件中)

java - 行动执行方法的困难

java - 速度空值和空字符串

java - 如何确保 Xtend Activity 注释处理器生成的 java 输出中包含所需的导入?

java - 安全地解析数字并且对区域设置敏感