为什么我不能调用片段内的方法
问题描述:
为什么不能在我的片段中调用checkButtonAdd
方法?为什么我不能调用片段内的方法
public class AddDataFragment extends Fragment {
DbHelper mydb;
Button buttonadd;
Button buttondelete;
private EditText inputLabel;
//Validator boolean
public boolean labelOk;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_add_data, container, false);
final Context context = getContext();
mydb = new DbHelper(context);
[...]
//Label
inputLabel = (EditText) view.findViewById(R.id.editText_label);
inputLabel.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable s) {
Pattern p = Pattern.compile("^[A-Z]{3}-[0-9]{4}$");
Matcher m = p.matcher(s);
labelOk = m.find();
Log.d("ButtonAdd?", String.valueOf(labelOk));
}
checkButtonAdd(); // <---------------
});
[...]
return view;
}
public void checkButtonAdd(){
if (labelOk){
buttonadd.setEnabled(true);
}else{
buttonadd.setEnabled(false);
}
};
}
我想这应该工作,因为我在另一个应用程序中使用它。但在MainActivitiy
这可能是错误的,如果是的话,我该如何解决它?
答
您必须使用这个关键字从回调方法之一调用该方法来获取封装Fragment的实例。例如..
@Override
public void afterTextChanged(Editable s) {
// Your Statements
AddDataFragment.this.checkButtonAdd();
}
无需声明该方法为静态。实际上,声明它是静态的将是一段不好的代码
+0
谢谢!这解决了它。对不起,我的初学者问题 – Rastaman
+0
对于初学者来说,这是很棘手的。 –
为什么不把** checkButtonAdd()**放在** afterTextChanged **方法里面? –
你认为如果是因为什么?因为这是5个验证器之一。 (代码被缩短)并且在每次肯定验证之后,我要检查if everey“validator boolean”是否为真。 – Rastaman