选项卡片段中的GridView仅在第二次滚动到该选项卡后显示

时间:2016-06-17 11:51:30

标签: android gridview android-asynctask android-gridview

我有一个标签片段,它在GridView中显示JSON解析结果。第一次滚动到该选项卡时,不显示结果。但在切换标签后,结果会在第二次访问时显示。

public class StoresFragment extends Fragment {
    private ProgressBar loading;
    private ArrayList<String> storenamefinal = new ArrayList<String>();
    private ArrayList<Integer> imagelinksfinal = new ArrayList<Integer>();
    private GridView gridview;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.stores_layout,null);
    }

    @Override
    public void onViewCreated(final View view, final Bundle savedInstanceState) {

        super.onViewCreated(view, savedInstanceState);
        gridview = (GridView) getActivity().findViewById(R.id.grid_stores);
        loading = (ProgressBar) getActivity().findViewById(R.id.proStores);

    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            new getData(getActivity()).execute();
        }

    }

        


    private class getData extends AsyncTask<Void, Void, Void> {
        private Context context;

        public getData(Context context) {
            this.context = context;
        }

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

        @Override
        protected Void doInBackground(Void... arg0) {
            String url = Config1.DATA_URL;
            StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                   
                    showJSON(response);
                }
            },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Toast.makeText(getActivity(), error.getMessage().toString(), Toast.LENGTH_LONG).show();
                        }
                    });
            RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
            requestQueue.add(stringRequest);
            return null;
        }

        private void showJSON(String response) {
            try {
                JSONObject jsonObject = new JSONObject(response);
                JSONArray result = jsonObject.getJSONArray("result");
                
                int i = result.length();
                Log.i("Result", result.toString());
                for (int j = 0; j < i; j++) {
                    storenamefinal.add(null);
                    imagelinksfinal.add(null);
                }
                String temp;
                for (int j = 0; j < i; j++) {
                    JSONObject Data = result.getJSONObject(j);
                    Log.i("Data", Data.toString());
                    temp = (Data.getString("mainpriority"));
                    Log.i("temp", temp.toString());
                    storenamefinal.set(Integer.parseInt(temp) - 1, Data.getString("storename"));

                    Log.i("Result Length", storenamefinal.toString());
                    imagelinksfinal.add(R.drawable.sg1);

                }
                Log.i("Result Length", storenamefinal.toString());
                Toast.makeText(getActivity(), storenamefinal.get(0), Toast.LENGTH_LONG).show();
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        protected void onPostExecute(Void result)

        {
            loading.setVisibility(View.GONE);
            gridview.setVisibility(View.VISIBLE);
            if (storenamefinal != null) {
                final GridAdapterStores gridadapter = new GridAdapterStores(getActivity(), storenamefinal, imagelinksfinal);
                gridview.setAdapter(gridadapter);
            }
        }
    }
}

适配器。

public class GridAdapterStores extends BaseAdapter {
    private Context context;
    private ArrayList<String> storename = new ArrayList<String>();
    private ArrayList<Integer> imagelinks = new ArrayList<Integer>();

    public GridAdapterStores(Context c, ArrayList<String> storename, ArrayList<Integer> imagelinks) {
        context = c;
        this.imagelinks = imagelinks;
        this.storename = storename;
    }

    @Override
    public int getCount() {
        return storename.size();
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

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

        View grid;
        if (convertView == null) {
            grid = new View(context);
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            grid = inflater.inflate(R.layout.grid_stores, parent, false);
        } else {
            grid = (View) convertView;
        }
        TextView textViewStoreName = (TextView) grid.findViewById(R.id.store_name);
        // ImageView imageViewStoreImage = (ImageView) grid.findViewById(R.id.store_image);
        textViewStoreName.setText(storename.get(position));
         //  Integer x=imagelinks.get(position);
        //  imageViewStoreImage.setImageResource(x);
        return grid;
    }
}

而且,每次切换选项卡时,都会添加gridview,但数据只显示在一个gridview中。

0 个答案:

没有答案
相关问题