如何在android中创建动态控件后刷新活动

时间:2013-02-15 05:37:01

标签: android android-asynctask android-gallery

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

我需要刷新活动而不调用Oncreate()[在Oncreate中的B'coz只调用异步任务]。

        @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();
            }
        });



    }

}

提前致谢

1 个答案:

答案 0 :(得分:0)

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

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