3

在我的活动 Oncreate() 函数中,我正在调用AsyncTask。在那个PostExecute( ) 中,我创建了一些动态图库控件并调用ImageAdapterL.notifyDataSetChanged(); . 但我得到空指针异常。

我需要刷新活动而不调用 Oncreate() [B'coz in Oncreate only im call async Task]。

        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home_page);

        new testAynscTask().execute();
    }
    private class testAynscTask extends AsyncTask<Void, Void, Void>{

        @Override
        protected Void doInBackground(Void... params) {
            processTogetImages();
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        CreateDynamicGallery();
            aImageAdapterL.notifyDataSetChanged();
        }
    }
public void CreateDynamicGallery(){
        CategoryGalleryLayout = (LinearLayout) findViewById(R.id.linearLayout1);
        Gallery g = new Gallery(getApplicationContext());
        GalleryLayout.addView(g,new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
            g.setSpacing(15);


        aImageAdapterL = new ImageAdapter(getApplicationContext());
        g.setAdapter(aImageAdapterL);
        g[positionP].setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(@SuppressWarnings("rawtypes") AdapterView parent, View v, int position, long id) {
                Toast.makeText(getBaseContext(), "" + position, Toast.LENGTH_SHORT).show();
            }
        });



    }

}

提前致谢

4

1 回答 1

0

在我看来,您并没有真正刷新活动,只是适配器中的图像。我建议使用空适配器从 onCreate 调用 createDynamicGallery(编写良好的适配器视图应该通过将空适配器视为空来处理空适配器)然后加载图像并用图像填充真实适配器(或新适配器)。将画廊视图的适配器设置为真实的适配器应该会导致画廊刷新,一切都会好起来的。

作为额外的观察,您可能希望查看使用带有 loadermanager 的 asynctaskloader 来帮助您正确处理旋转。使用您当前的代码,如果异步任务需要很长时间才能执行,则可能会出现错误(可能是“活动破坏”错误)或两个异步任务在屏幕旋转后尝试加载图像的竞争条件。

于 2013-10-18T21:00:59.540 回答