我正在努力让我的代码更加开发人员友好。最初我设置了一个带有标准点击监听器的按钮,每次按下它时,编辑文本的值就会增加1。
现在为了尝试让它更有条理我试图将点击监听器移动到它自己的类,它将托管一系列switch语句。我遇到的唯一问题是能够为我的方法设置一个getter和setter。
这是我目前的点击监听器
$(document).on('onComplete.fb', function( e, instance, slide ) {
// Your code goes here
});
这是我单独的案例陈述,可以在以后链接。
testButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int time = Integer.valueOf(editHours.getText().toString());
time++;
editHours.setText(Integer.toString(time));
}
});
我只是坚持设置getter和setter的能力。使用getter获取当前值,然后最后使用setter设置新值。
另外作为旁注,你注意到我没有展示我自己的getter和setter,因为我对这个方法的操作方式有点困惑。
谢谢
答案 0 :(得分:0)
我不知道你是否知道这一点,但你不必使用匿名类,或者根本不需要单独的类,但是可以在xml中的按钮上设置android:onclick="onClickMethod"
,然后你只需要定义活动本身的方法。这将适用于任何方法名称,只要该方法的格式为public void methodName(View v)
实际上这是在官方Android开发人员培训和参考中推荐的。因此,我会参加我的活动课程:
public void onTestClick(View v) {
int time = Integer.valueOf(editHours.getText().toString());
time++;
editHours.setText(Integer.toString(time));
}
和xml:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onTestClick"
/>
我通常使用此方法,因为开发人员可以查看xml并查看方法名称,然后转到活动并查看它正在做什么。我的眼睛也比匿名类更不凌乱,在任何情况下,我可能想要以编程方式运行相同的代码,我可以访问该方法。此外,AndroidStudio会自动知道两者是否已链接,因此其所有功能(如findusages等)都可以使用此方法。
您可以在此处查看有关此内容的更多信息:https://developer.android.com/reference/android/widget/Button.html
答案 1 :(得分:0)
基于您对上述答案的评论,我建议您做一些类似这样的答案:https://stackoverflow.com/a/9977370/4888701,除了在您的监听器类中定义接口,并在创建新接口时将活动提供给监听器构造函数监听器。否则它会起作用。根据您可能正在编辑的值的数量,它可能会在活动中保存您的代码行。如果您正在执行类似的操作,这也会使侦听器可重用于其他活动,因为您可以在每个活动中实现该方法。
如果这会增加太多代码,您可以尝试将Listener类定义为Activity中的私有内部类。这样你就可以访问这些值,但至少可以选择在查看代码时隐藏类内容。
答案 2 :(得分:0)
如果我了解您的用例,您不一定需要getter / setter。为什么不使用类似的东西:
public class EditTextIncrementor implements View.OnClickListener {
private final EditText editText;
public EditTextIncrementor(EditText editText){
this.editText = editText;
}
@Override
public void onClick(View v) {
String counter = editText.getText().toString();
int time = Integer.valueOf(counter);
time++;
editText.setText(Integer.toString(time));
}
}
答案 3 :(得分:0)
public class MyClickListener extends AppCompatActivity implements View.OnClickListener {
EditText editHours;
Button testButton;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editHours = (EditText)findViewById(R.id.editHours);
testButton = (Button)findViewById(R.id.testingButton);
testButton.setOnClickListener(new MyClickListener());
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.testingButton:
Log.i("Test", "Complete");
int time = Integer.valueOf(editHours.getText().toString());
time++;
editHours.setText(Integer.toString(time));
break;
default:
Log.i("Test", "Complete");
}