我想从方向盘的所有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;
}
}
答案 0 :(得分: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
参数的新值将传递回主代码。
答案 1 :(得分: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;
}