【问题标题】:Which place to put a variable for a nested inner class, android在哪个地方放置一个嵌套内部类的变量,android
【发布时间】:2012-12-07 06:13:59
【问题描述】:

在下面的例子中,在这两个选项中,哪个是放置 View 类的变量的最佳位置?在这个 android 应用程序代码中,将其作为扩展 Activity 的类的全局变量是否更好,还是在扩展 BaseAdapter 的名为 ImageAdapter 的嵌套内部类中声明该变量更好?

哪个更好?

下面显示了 2 个示例代码。

在第一个示例中,View 类的 view 变量在范围内被声明为更具全局性。如此处所示,它出现在 Main 类中。

public class Main extends Activity {
     View view;  // <--- PLACEMENT IN A MORE GLOBAL POSITION
     Cursor imageCursor;

public class ImageAdapter extends BaseAdapter {

    private Context context;

   @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if(convertView == null){
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.adapterview, null);
        }else{
            view = convertView;
        }

在第二个示例中,View 视图被声明为 ImageAdapter 类的局部变量,在该类的 getView 方法中。

 public class Main extends Activity {
Cursor imageCursor;

public class ImageAdapter extends BaseAdapter {

    private Context context;

   @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view;  // <--- PLACEMENT AS LOCAL VARIABLE
        if(convertView == null){
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.adapterview, null);
        }else{
            view = convertView;
        }

      

【问题讨论】:

    标签: android variables scope nested nested-class


    【解决方案1】:

    没有理由将view 设为成员字段。它的用途是方法的局部变量,因此请将其作为方法的局部变量。

    事实上,对于这种用途,您绝对不想将视图暴露给您类中的其他代码。它应该返回到框架(调用getView),然后由您的代码单独处理。如果您无意中对从getView 返回的视图进行了带外更改,则行为将无法预测。

    【讨论】:

    • 是的,这是有道理的,所以我认为在每种情况下尽可能地限制范围总是最好的。只允许该变量所需的范围。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多