androidgridviewandroid-asynctasktextwatcherendlessscroll

GridView getting cleared on back button pressed(While keyboard is visible)


The actual problem is, i load a grid from server, i have a search field at the top of the page,after searching suppose a list is shown, i have the keyboard present in the screen, but on clicking the back button yo hide the keyboard the whole view(GridView) is getting cleared.

Here is the code

public class ViewClass extends Fragment {

@Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState); 

    }


@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View v = inflater.inflate(R.layout.viewclass, container, false);

        mylist = (GridView) v.findViewById(R.id.grid_view);
        endlessScrollListener = new EndlessScrollListener();
        mylist.setOnScrollListener(endlessScrollListener);
        adapter = new CustomAdapter(getActivity());
        // Instance of ImageAdapter Class
        mylist.setAdapter(adapter);
        searchflag = 0;
        _data.clear();
        index = 0;
        dialogflag = 0;
        callviewData(index, "");
        search = (EditText) v.findViewById(R.id.search);

        search.addTextChangedListener(new TextWatcher() {

            private int length_pre;

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                System.out.println("count :" + s.length() + " length_pre:"
                        + length_pre);

                if (s.length() == 0 && length_pre == 1) {

                    endlessScrollListener.clear();

                    searchflag = 1;

                    index = 0;
                    dialogflag = 0;



                    callviewData(index, s.toString());
                } else if (s.length() > 0) {

                    endlessScrollListener.clear();
                                        searchflag = 1;

                    index = 0;
                    dialogflag = 0;




                    callviewData(index, s.toString());
                }
                length_pre = s.length();

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });

        return v;
    }

this is the endless scroll listener

public class EndlessScrollListener implements OnScrollListener {

    private int visibleThreshold = 5;
    private int currentPage = 0;
    private int previousTotal = 0;
    private boolean loading = true;

    public EndlessScrollListener() {
    }

    public void clear() {
        // TODO Auto-generated method stub
        visibleThreshold = 5;
        currentPage = 0;
        previousTotal = 0;
        loading = true;
    }

    public EndlessScrollListener(int visibleThreshold) {
        this.visibleThreshold = visibleThreshold;
    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        if (loading) {
            System.out.println("httscrollllllloadingg");
            if (totalItemCount > previousTotal) {
                loading = false;
                previousTotal = totalItemCount;
                currentPage++;
            }
            System.out.println("htvvv:"
                    + (totalItemCount - visibleItemCount) + "::"
                    + (firstVisibleItem + visibleThreshold));
        }
        if (!loading
                && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
            // I load the next page of gigs using a background task,
            // but you can call any function here.
            System.out.println("httscrollllll");
            index = index + 1;
            appPref.SaveData(String.valueOf(index), "index");
            dialogflag = 1;



            callviewData(index, search.getText().toString());
            loading = true;
        }
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        // TODO Auto-generated method stub

    }

}

This is the custom adapter

 public class CustomAdapter extends BaseAdapter  {

            Context context;
            private Filter planetFilter;
            ArrayList<RowItem> rowItems;

            public CustomAdapter(Context context) {
                this.context = context;
                rowItems = _data;
                // this.rowItems = rowItems;
            }

            @Override
            public int getCount() {
                System.out.println("list data:" + _data.size());
                return _data.size();
            }

            @Override
            public Object getItem(int position) {

                return null;
            }

            @Override
            public long getItemId(int position) {

                return position;
            }

            /* private view holder class */
            private class ViewHolder {
                ImageView pic;
                TextView title;
                TextView desc;
                LinearLayout rl;
            }

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

                ViewHolder holder = null;

                LayoutInflater mInflater = (LayoutInflater) context
                        .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
                if (convertView == null) {
                    convertView = mInflater.inflate(R.layout.product_holder, null);
                    holder = new ViewHolder();

                    holder.rl = (LinearLayout) convertView.findViewById(R.id.rl);
                    holder.title = (TextView) convertView.findViewById(R.id.tName);
                    holder.pic = (ImageView) convertView.findViewById(R.id.iItem);

                    convertView.setTag(holder);
                } else {
                    holder = (ViewHolder) convertView.getTag();
                    // convertView.setTag(holder);
                }

                try {

                    imgj = _data.get(position).getPro_pic().toString();

                    if (imgj.equals("")) {
                        imgj = "no_photo.png";
                    }

                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                try {
                    imageLoader.displayImage(upurl + imgj.replace(" ", "%20"),
                            holder.pic, doption_two, animateFirstListener);

                    holder.title.setText(_data.get(position).getTitle());

                    System.out.println("list position pid:"
                            + _data.get(position).getPid());

                    holder.rl.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                            try {
                                // int pos =
                                // Integer.parseInt(v.getTag().toString());
                                System.out.println("list position pid:"
                                        + _data.get(position).getPid());
                                appPref.SaveData(_data.get(position).getPid(),
                                        "pdet_id");
                                // TODO Auto-generated method stub

                                search.setText("");


                                appPref.SaveData(String.valueOf(position),
                                        "sel_pos");
                                addFragment.addFragment(new DetailView(), true,
                                        FragmentTransaction.TRANSIT_NONE,
                                        "detview", R.id.tabContent, getActivity());
                            } catch (Exception e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    });
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                return convertView;
            }

 }      }

This is the asynctask to populate data

public void callviewData(final int ind, final String value) {
        new AsyncTask<Void, Void, Void>() {

            String result = "";

            ProgressDialog progressDialog = null;

            @Override
            protected void onPreExecute() {
                // TODO Auto-generated method stub

                if (searchflag == 1) {
                    _data.clear();
                }
                if (dialogflag == 0) {
                    progressDialog = new ProgressDialog(getActivity());
                    progressDialog.setMessage("Loading , Please wait...");
                    progressDialog.setIndeterminate(true);
                    progressDialog.setCanceledOnTouchOutside(false);
                    progressDialog.show();
                }
                super.onPreExecute();
            }

            @Override
            protected Void doInBackground(Void... params) {
                // TODO Auto-generated method stub
                String url = "http://dummy.com/json/product_view.php?index="
                        + ind + "&value=" + value;
                System.out.println("url---" + url);
                try {
                    JSONObject jsonObject = jpass.getJSONFromUrl(url);

                    result = jsonObject.getString("result");
                    if (result.equals("success")) {
                        JSONArray Details = jsonObject.getJSONArray("details");

                        for (int i = 0; i <= Details.length() - 1; i++) {
                            RowItem row = new RowItem();
                            JSONObject detail = Details.getJSONObject(i);

                            row.setTitle(detail.getString("title"));
                            row.setDesc(detail.getString("description"));
                            row.setPro_pic(detail.optString("image", "c"));
                            row.setPid(detail.getString("p_id"));

                            _data.add(row);

                        }
                    }

                } catch (Exception e) {
                    dialogflag = 0;
                    e.printStackTrace();
                }

                return null;
            }

            @Override
            protected void onPostExecute(Void arg) {
                try {
                    // TODO Auto-generated method stub
                    System.out.println("exception post execute");
                    if (dialogflag == 0) {
                        progressDialog.dismiss();
                    }

                    if (result.equals("success")) {
                        System.out.println("sixe is " + _data.size());
                        appPref.SaveData(String.valueOf(_data.size()), "siz");
                        adapter.notifyDataSetChanged();


                    }

                    super.onPostExecute(arg);
                } catch (Exception e) {
                    // TODO Auto-generated catch block

                    e.printStackTrace();
                }
            }

        }.execute();
    }

Solution

  • Maybe you have created the adapter class in the same fragment. Instead of calling adapter = new CustomAdapter(getActivity(), _data); in the oncreate view try initializing it inside the onPostexecute were you call your server hope this will solve your issue