为什么我不能在Fragment中调用方法

时间:2015-11-03 14:36:06

标签: android validation

为什么无法在片段中调用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这可能是错误,如果是,我该如何解决呢?

2 个答案:

答案 0 :(得分:2)

您必须使用 this 关键字从其中一个回调方法调用该方法,以获取封闭Fragment的实例。比如..

@Override
public void afterTextChanged(Editable s) {
    // Your Statements
    AddDataFragment.this.checkButtonAdd();
}

无需将方法声明为静态。事实上,将其声明为静态将是一段糟糕的代码

答案 1 :(得分:0)

你的范围不合适。

尝试

AddDataFragment.checkButtonAdd();

代替。