小部件声明。在onCreateView之内还是之外?

时间:2014-10-18 08:35:59

标签: android

这两个代码之间的差异是什么:

EditText mTitleField;
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_crime, parent, false);
        mTitleField = (EditText)v.findViewById(R.id.crime_title);
}

   @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_crime, parent, false);
        EditText mTitleField = (EditText)v.findViewById(R.id.crime_title);
}

第一个在onCreateView外部声明了Edittext变量,第二个在onCreateView中有声明。 在哪里声明它是否重要?

3 个答案:

答案 0 :(得分:0)

是的,这很重要。 对于第一种情况,您也可以将mTitleField与其他方法一起使用(尽管您必须为其他方法单独实例化)。 对于第二种情况,你在onCreateView()中声明并实例化了mTitleField,因此只能在该方法内部访问它。

这是Java中全局变量和局部变量的基本概念。

答案 1 :(得分:0)

当然它确实很重要,我假设第一个案例mTitleField在班级中被全局宣布为。在这种情况下,您可以在该特定类的任何其他方法中访问mTitleField EditText

例如:假设点击任何按钮,您需要在EditText输入文字,然后您就可以这样做了

String someString = mTitleField.getText().toString();

在第二种情况下,mTitleField在本地声明。在onCreateView(...)之外的情况下,您无法访问mTitleFieldmTitleField的范围位于onCreateView(...)

例如:假设点击任何按钮,您需要在EditText输入文字,然后您必须在此EditText方法中再次声明onClick

EditText mTitleField = (EditText)v.findViewById(R.id.crime_title);
String someString = mTitleField.getText().toString();

答案 2 :(得分:0)

区别在于,在First First中它全局声明,因此它的优点是你可以在整个活动中的任何地方使用全局变量。而对于Second方法,它可以用作局部变量,可以用于活动中的特定位置。

局部变量在块的范围内定义。

全局变量是可以在多个范围内访问的变量。