2

FragmentPagerAdapterスワイプFragmentしてAsyncTaskgridviewを更新するために使用していますが、UIを更新していません。

UI を更新せず、エラーもスローしません。フローと実行中の GalleryTab フラグメントを 2 回チェックしようとしましたが、問題を理解できませんでした。

私のコード:-

public class GalleryTab extends Fragment {
            GridView gridview;
            ProgressDialog mProgressDialog;
            GridViewAdapter adapter;
            public List<GalleryList> phonearraylist = null;
            View view;
            private WeakReference<RemoteDataTask> asyncTaskWeakRef;

        public static Fragment newInstance(Context context) {
            GalleryTab f = new GalleryTab();
        return f;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            // Inflate the layout for this fragment
            view = inflater.inflate(R.layout.activity_gallery_tab, null);
             setRetainInstance(true);
                startNewAsyncTask();
            //new RemoteDataTask(this).execute();
            return inflater.inflate(R.layout.activity_gallery_tab, container, false);
        }

        // RemoteDataTask AsyncTask
            private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
                private WeakReference<GalleryTab> fragmentWeakRef;

                private RemoteDataTask (GalleryTab gallerytab) {
                    this.fragmentWeakRef = new WeakReference<GalleryTab>(gallerytab);
                }

                @Override
                protected void onPreExecute() {
                    super.onPreExecute();

                } 

                @Override
                protected Void doInBackground(Void... params) {
                    // Create the array

                    phonearraylist = new ArrayList<GalleryList>();
                    try {
                        for (int i = 0; i <= 6; i++) {
                            GalleryList map = new GalleryList();
                            map.setGallery("http://oi39.tinypic.com/21oydxs.jpg");
                            System.out.println("PRINT!!!!--  "+ i);
                            phonearraylist.add(map);
                        }
                    } catch (ParseException e) {
                        Log.e("Error", e.getMessage());
                        e.printStackTrace();
                    }

                    return null;
                }

                @Override
                protected void onPostExecute(Void result) {
                    // if (this.fragmentWeakRef.get() != null) {
                    adapter = new GridViewAdapter(getActivity(), phonearraylist);
                    System.out.println("PRINT SIZE --  "+ phonearraylist.size());
                    gridview = (GridView)view.findViewById(R.id.gridview);
                    gridview.setAdapter(adapter);

                //  mProgressDialog.dismiss();
                    // }
                }
            }
            private void startNewAsyncTask() {
                RemoteDataTask asyncTask = new RemoteDataTask(this);
                this.asyncTaskWeakRef = new WeakReference<RemoteDataTask >(asyncTask );
                asyncTask.execute();
            }
    }
4

2 に答える 2

2

ビューを返すため、GridView onCreateView() メソッドの ID を確認する必要があります...

gridview = (GridView)view.findViewById(R.id.gridview);

はい、初期化時にビューのオブジェクトを作成している場合は、次のように置き換えます。

return inflater.inflate(R.layout.activity_gallery_tab, container, false);

return view;
于 2013-08-22T05:00:43.210 に答える