为什么我不能调用片段内的方法

问题描述:

为什么不能在我的片段中调用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

为什么不把** checkButtonAdd()**放在** afterTextChanged **方法里面? –

+0

你认为如果是因为什么?因为这是5个验证器之一。 (代码被缩短)并且在每次肯定验证之后,我要检查if everey“validator boolean”是否为真。 – Rastaman

您必须使用这个关键字从回调方法之一调用该方法来获取封装Fragment的实例。例如..

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

无需声明该方法为静态。实际上,声明它是静态的将是一段不好的代码

+0

谢谢!这解决了它。对不起,我的初学者问题 – Rastaman

+0

对于初学者来说,这是很棘手的。 –

你不在正确的范围内。

尝试

AddDataFragment.checkButtonAdd(); 

代替。

+0

'“无法解析符号”'。但这听起来合乎逻辑。我认为它会起作用,因为我在另一个应用程序中使用了它。但直接在'MainActivity'中。 – Rastaman

+0

添加静态后没有变化 – Rastaman

+0

我刚刚看到您的呼叫超出了每个功能。 将其放入afterTextChanged函数中。 并请提供日志,以便更好地帮助您。 – LilaQ