Android - 如何使用在内部类上声明的变量?

时间:2015-06-08 17:46:03

标签: java android

我有这个方法:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        AnimalWebService animalWebService = restAdapter.create(AnimalWebService.class);

        Callback<List<Animal>> callback = new Callback<List<Animal>>() {
            @Override
            public void success(List<Animal> animals, Response response) {
                if (animals == null) {
                    Context context = getApplicationContext();
                    CharSequence text = "No animals available!";
                    int duration = Toast.LENGTH_SHORT;

                    Toast toast = Toast.makeText(context, text, duration);
                    toast.show();
                }
                else {
                    ListAdapter theAdapter = new MyAdapter(getApplicationContext(), animals);
                }
            }
            @Override
            public void failure(RetrofitError retrofitError) {
                return;
            }
        };

        animalWebService.get(callback);
        theListView.setAdapter(theAdapter);
    }

最后我有theListView.setAdapter(theAdapter);theAdapter在此处未被识别,因为它是在内部类中声明的。

我该如何解决这个问题?在Android中编程时,此案例的最佳做法是什么?

1 个答案:

答案 0 :(得分:4)

如果您不需要在Activity类的其他部分引用theAdapter,我只会从回调中更新它:

    Callback<List<Animal>> callback = new Callback<List<Animal>>() {
        @Override
        public void success(List<Animal> animals, Response response) {
            if (animals == null) {
            }
            else {
                ListAdapter theAdapter = new MyAdapter(getApplicationContext(), animals);
                theListView.setAdapter(theAdapter);
            }
        }
        @Override
        public void failure(RetrofitError retrofitError) {
            return;
        }
    };

这可以确保您永远不会在列表视图上调用setAdapter(null),这很好。您应该根据回调的结果触发事件:您的调用可能会失败(然后调用failure),或者它可能返回一个空列表。在这些情况下,我们不希望将ListView连接到适配器。