-1

我想从轮子的所有 4 行中获取值,并将值显示到 textview 或 toast 中。我的 testwheelvalue(,) 方法假设从轮子表面获取值,并将该值返回给我的方法 testpin()。在 testpin() 将值存储到 v1-v4 之后,方法 updatestatus() 应该将值的总和显示到文本字段中。

公共类 PasswActivity 扩展 Activity {

    int testpins;
    int v1 = 0;
    int v2 = 0;
    int v3 = 0;
    int v4 = 0;
    TextView text;

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

        setContentView(R.layout.passw_layout);
        initWheelday(R.id.passw_1);
        initWheelhour(R.id.passw_2);
        initWheelmin(R.id.passw_3);
        initWheelsec(R.id.passw_4);

        updateStatus();
    }

    // Wheel scrolled flag
    private boolean wheelScrolled = false;

    // Wheel scrolled listener
    OnWheelScrollListener scrolledListener = new OnWheelScrollListener() {
        public void onScrollingStarted(WheelView wheel) {
            wheelScrolled = true;
        }

        public void onScrollingFinished(WheelView wheel) {
            wheelScrolled = false;
            updateStatus();
        }
    };

    // Wheel changed listener
    private OnWheelChangedListener changedListener = new OnWheelChangedListener() {
        public void onChanged(WheelView wheel, int oldValue, int newValue) {
            if (!wheelScrolled) {
                updateStatus();
            }
        }
    };

    /**
     * Updates entered PIN status
     */
    private void updateStatus() {
        text = (TextView) findViewById(R.id.pwd_status);
        testPin();

        text.setText(String.valueOf(testpins));
        // Toast.makeText(getBaseContext(), testpins,
        // Toast.LENGTH_SHORT).show();
    }

    /**
     * Initializes wheel
     * 
     * @param id
     *            the wheel widget Id
     */
    private void initWheelsec(int id) {
    WheelView wheel = getWheel(id);
    wheel.setViewAdapter(new NumericWheelAdapter(this, 0, 59, "%02d"));
    wheel.setCurrentItem((int) (Math.random() * 10));

    wheel.addChangingListener(changedListener);
    wheel.addScrollingListener(scrolledListener);
    wheel.setCyclic(false);
    wheel.setInterpolator(new AnticipateOvershootInterpolator());
}

private void initWheelmin(int id) {
    WheelView wheel = getWheel(id);
    wheel.setViewAdapter(new NumericWheelAdapter(this, 0, 59, "%02d"));
    wheel.setCurrentItem((int) (Math.random() * 10));

    wheel.addChangingListener(changedListener);
    wheel.addScrollingListener(scrolledListener);
    wheel.setCyclic(false);
    wheel.setInterpolator(new AnticipateOvershootInterpolator());
}

private void initWheelhour(int id) {
    WheelView wheel = getWheel(id);
    wheel.setViewAdapter(new NumericWheelAdapter(this, 0, 23, "%02d"));
    wheel.setCurrentItem((int) (Math.random() * 10));

    wheel.addChangingListener(changedListener);
    wheel.addScrollingListener(scrolledListener);
    wheel.setCyclic(false);
    wheel.setInterpolator(new AnticipateOvershootInterpolator());
}

private void initWheelday(int id) {
    WheelView wheel = getWheel(id);
    wheel.setViewAdapter(new NumericWheelAdapter(this, 0, 5, "%02d"));
    wheel.setCurrentItem((int) (Math.random() * 10));

    wheel.addChangingListener(changedListener);
    wheel.addScrollingListener(scrolledListener);
    wheel.setCyclic(false);
    wheel.setInterpolator(new AnticipateOvershootInterpolator());
}


    /**
     * Returns wheel by Id
     * 
     * @param id
     *            the wheel Id
     * @return the wheel with passed Id
     */
    private WheelView getWheel(int id) {
        return (WheelView) findViewById(id);
    }

    /**
     * Tests entered PIN
     * 
     * @param v1
     * @param v2
     * @param v3
     * @param v4
     * @return true
     */
    private void testPin() {

        v1 testWheelValue(R.id.passw_1, v1);
        v2 testWheelValue(R.id.passw_2, v2);
        v3 testWheelValue(R.id.passw_3, v3);
        v4 testWheelValue(R.id.passw_4, v4);
        testpins = v1 + v2 + v3 + v4;
    }

    /**
     * Tests wheel value
     * 
     * @param id
     *            the wheel Id
     * @param value
     *            the value to test
     * @return true if wheel value is equal to passed value
     */
    private int testWheelValue(int id, int value) {
        int wheel = getWheel(id).getCurrentItem();
        wheel = value;
        text.setText(String.valueOf(testpins));
        return wheel;
    }

}
4

2 回答 2

2

testWheelValue所做的只是比较 ID 的值和您的v参数之一,然后返回相等性。如果你想让你的v参数被某些东西覆盖,你需要告诉程序:

v1 = getWheelValue(R.id.passw_1); // You don't need to pass anything but the ID here
v2 = getWheelValue(R.id.passw_2);
v3 = getWheelValue(R.id.passw_3);
v4 = getWheelValue(R.id.passw_4);

testpins = v1 + v2 + v3 + v4;
updateStatus();

// This method should just use getCurrentItem from the WheelView
private int getWheelValue(int id) {
    return getWheel(id).getCurrentItem();
}

这样,v参数的新值就会传回主代码。

于 2012-07-21T18:44:39.513 回答
0
private void testPin() {

    v1 testWheelValue(R.id.passw_1, v1);
    v2 testWheelValue(R.id.passw_2, v2);
    v3 testWheelValue(R.id.passw_3, v3);
    v4 testWheelValue(R.id.passw_4, v4);

=您在上面的四行中都缺少一个,但我认为这只是一个剪切和粘贴错误。

    testpins = v1 + v2 + v3 + v4;

我会做return v1 + v2 + v3 + v4;并摆脱testpins班级成员。

}

/**
 * Tests wheel value
 * 
 * @param id
 *            the wheel Id
 * @param value
 *            the value to test
 * @return true if wheel value is equal to passed value
 */
private int testWheelValue(int id, int value) {
    int wheel = getWheel(id).getCurrentItem();
    wheel = value;

删除该行,因为您正在覆盖正在读取的值。此外,int value不需要作为参数。

    text.setText(String.valueOf(testpins));

摆脱这条线,就像updateStatus()在正确的地方一样。text也是另一个不必要的类成员 - 它应该是本地的updateStatus()

    return wheel;
}
于 2012-07-27T03:46:07.033 回答