当我按下按钮时,如何使用onResume和onPause方法

时间:2015-11-02 06:28:09

标签: android android-recyclerview recycler-adapter

我使用json webservices为recyclerview提供了一个自定义适配器。我必须逐个解析网址并使用onscrolllistener()显示cardview。我的问题是,当我按下后退按钮并在我在最近的应用程序中打开(当时调用onResume时),它将仅显示在调用onPause时调用的URL。那么当我调用onResume时,如何刷新listview。

Thanks in Advance,

Here my code synepet..

public class MainActivity extends AppCompatActivity {

    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private GridLayoutManager mGridManager;
    private ProgressBar mProgressBar;

    private static String url = "https://www.googleapis.com/youtube/v3/playlists?part=snippet&channelId=UCGyZswzm4G-wEfRQHgMSAuw&maxResults=50&key=AIzaSyCi0ApXYk08YpzyEO8jYJanaud-Epti6ks&pageToken=CDIQAQ";

    JSONArray contacts = null;
    private String mNextToken;
    JSONObject jsonObj;
    private boolean loading = true;
    int visibleItemCount, totalItemCount, pastVisiblesItems;
    private List<PlayListItem> mContactList = new ArrayList<PlayListItem>();
    private PlayListItem mContact;
    private Bundle mbundle;
    String name2 = "Arasu";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
        mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        mRecyclerView.setHasFixedSize(true);

        // Calling async task to get json
        new GetContacts().execute();

        mAdapter = new CardAdapter(MainActivity.this, mContactList);
        mRecyclerView.setAdapter(mAdapter);
        getScreenOrientation();
    }

    @Override
    public void onResume() {
        super.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        System.out.println("Size2---->" + mContactList.size());
    }


private class GetContacts extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            // Showing progress dialog
            mProgressBar.setVisibility(View.VISIBLE);
            mProgressBar.setMax(100);
        }

        @Override
        protected Void doInBackground(Void... arg0) {
            // Creating service handler class instance
            ServiceHandler sh = new ServiceHandler();

            // Making a request to url and getting response
            String jsonArray = sh.makeServiceCall(url, ServiceHandler.GET);

            //Log.d("Response: ", "> " + jsonArray);
            if (jsonArray != null) {
                try {
                    jsonObj = new JSONObject(jsonArray);

                    if (jsonObj.has("nextPageToken")) {
                        loading = true;
                        mNextToken = jsonObj.getString("nextPageToken");
                    } else {
                        loading = false;
                    }
                    // Getting JSON Array node
                    contacts = jsonObj.getJSONArray("items");

                    // looping through All Contacts
                    for (int i = 0; i < contacts.length(); i++) {
                        JSONObject c = contacts.getJSONObject(i);
                        String title = c.getJSONObject("snippet").getString("title");
                        String time = c.getJSONObject("snippet").getString("publishedAt");
                        String playlist_id = c.get("id").toString();

                        // Find Screen size and set the Image for this size
                        DisplayMetrics dm = new DisplayMetrics();
                        getWindowManager().getDefaultDisplay().getMetrics(dm);
                        double x = Math.pow(dm.widthPixels / dm.xdpi, 2);
                        double y = Math.pow(dm.heightPixels / dm.ydpi, 2);
                        double screenInches = Math.sqrt(x + y);
                        int inch = (int) Math.round(screenInches);
                        String image = null;

                        try {
                            if (inch <= 4) {
                                image = c.getJSONObject("snippet").getJSONObject("thumbnails").getJSONObject("medium").getString("url");
                            } else if (inch > 4 && inch <= 6) {
                                image = c.getJSONObject("snippet").getJSONObject("thumbnails").getJSONObject("medium").getString("url");
                            } else if (inch > 6 && inch <= 10) {
                                image = c.getJSONObject("snippet").getJSONObject("thumbnails").getJSONObject("medium").getString("url");
                            } else {
                                image = c.getJSONObject("snippet").getJSONObject("thumbnails").getJSONObject("default").getString("url");
                            }
                        } catch (IndexOutOfBoundsException e) {
                            e.printStackTrace();
                        }

                        mContact = new PlayListItem();
                        mContact.setmTitle(title);
                        mContact.setmID(playlist_id);
                        mContact.setmTime(time);
                        mContact.setmThumbnailURL(image);
                        mContact.setmNextToken(mNextToken);
                        mContactList.add(mContact);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            } else {
                Log.e("ServiceHandler", "Couldn't get any data from the url");
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            // Dismiss the progress dialog
            if (mProgressBar.isShown())
                mProgressBar.setVisibility(ProgressBar.GONE);
            mAdapter.notifyDataSetChanged();

            mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {

                @Override
                public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                    super.onScrolled(recyclerView, dx, dy);
                    visibleItemCount = mGridManager.getChildCount();
                    totalItemCount = mGridManager.getItemCount();
                    pastVisiblesItems = mGridManager.findFirstVisibleItemPosition();

                    if (loading) {
                        if ((visibleItemCount + pastVisiblesItems) >= totalItemCount) {

                            Log.v("...", "Last Item Wow !");
                            if (jsonObj.has("nextPageToken")) {
                                url = "https://www.googleapis.com/youtube/v3/playlists?part=snippet&channelId=UCGyZswzm4G-wEfRQHgMSAuw&maxResults=50&key=AIzaSyCi0ApXYk08YpzyEO8jYJanaud-Epti6ks&pageToken=" + mNextToken;
                                System.out.println("url--->" + url);
                                new GetContacts().execute();
                            } else {
                                url = "https://www.googleapis.com/youtube/v3/playlists?part=snippet&channelId=UCGyZswzm4G-wEfRQHgMSAuw&maxResults=50&key=AIzaSyCi0ApXYk08YpzyEO8jYJanaud-Epti6ks&pageToken=" + mNextToken;
                                System.out.println("url----else--->" + url);
                                new GetContacts().execute();
                            }
                            loading = false;
                        }
                    }
                }
            });
        }
    }
}

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {
    private List<PlayListItem> mItems;
    private Activity activity;
    public ImageLoader imageLoader;
    public CardAdapter(Activity activity, List<PlayListItem> items) {
        this.activity = activity;
        this.mItems = items;
        imageLoader = new ImageLoader(activity.getApplicationContext());
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.recycler_outer_playlist_cardview, viewGroup, false);
        ViewHolder viewHolder = new ViewHolder(v);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, final int i) {
        System.out.println("Title Value is----------->"+mItems.get(0));
        PlayListItem nature = mItems.get(i);

        Log.d("Title Value is","----------->"+nature.getmTitle());
        viewHolder.tvTitle.setText(nature.getmTitle());

        final String playListID = nature.getmID();
        final String thumnailsURL = nature.getmThumbnailURL();

        final Calendar c = Calendar.getInstance();
        int cur_year = c.get(Calendar.YEAR);
        int cur_month = c.get(Calendar.MONTH) + 1;
        int cur_day = c.get(Calendar.DAY_OF_MONTH);
        int cur_hour = c.get(Calendar.HOUR_OF_DAY);
        int cur_minute = c.get(Calendar.MINUTE);

        // Getting updated date from url
        String string = nature.getmTime();
        String[] parts = string.split("-");
        String part1 = parts[0]; // 004
        String part2 = parts[1]; // 034556
        String part3 = parts[2];
        String[] part4 = part3.split("T");
        String part5 = part4[0];
        String part6 = part4[1];
        // Toast.makeText(activity, "Given Date is : " + part1 + "/" + part2 + "/" + part3, Toast.LENGTH_LONG).show();

        // Log.d("Updated Current Day", part5);
        int giv_yr = Integer.parseInt(part1);
        int giv_mnt = Integer.parseInt(part2);
        int giv_day = Integer.parseInt(part5);

        // Difference Two dates
        int day_yr = 0, day_mnt = 0, day_day = 0;

        if (cur_year >= giv_yr) {
            if (cur_year >= giv_yr) {
                day_yr = cur_year - giv_yr;
            } else {
                day_yr = giv_yr - cur_year;
            }
            if (cur_month >= giv_mnt) {
                day_mnt = cur_month - giv_mnt;
            } else {
                day_mnt = giv_mnt - cur_month;
            }
            if (cur_day >= giv_day) {
                day_day = cur_day - giv_day;
            } else {
                day_day = giv_day - cur_day;
            }
        }
        String yr = Integer.toString(day_yr);
        String mnt = Integer.toString(day_mnt);
        String days = Integer.toString(day_day);

        if (day_day == 0)
            viewHolder.tvTime.setText("Updated Today");
        else if (day_day < 7)
            viewHolder.tvTime.setText("Updated " + days + " Days ago");
        else if (day_day < 30) {
            int week = day_day / 7;
            String Week = Integer.toString(week);
            viewHolder.tvTime.setText("Updated " + Week + " Weeks ago");
        } else {
            viewHolder.tvTime.setText("Updated " + mnt + " Months ago");
        }

        //imageLoader.DisplayImage(nature.getmThumbnailURL(), viewHolder.imgThumbnail);
        Picasso.with(activity)
                .load(nature.getmThumbnailURL())
                /*.placeholder(R.drawable.my_thumnail)*/
               .into(viewHolder.imgThumbnail);

        viewHolder.item_view.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(activity, VideoPlayActivity.class);
                intent.putExtra("PLAYLIST_ID", playListID);
                intent.putExtra("THUMNAIL_URL", thumnailsURL);
                v.getContext().startActivity(intent);
            }
        });
        /*System.out.println("URL -------------->"+nature.getmThumbnailURL());
        // String img_url = nature.getmThumbnailURL();
        try {
            URL url = new URL(nature.getmThumbnailURL());
            Bitmap bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
            System.out.println("Image bmp -------------->"+bmp);
            //imageView.setImageBitmap(bmp);
            viewHolder.imgThumbnail.setImageBitmap(bmp);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }*/
    }

    @Override
    public int getItemCount() {
        return mItems.size();
    }
    class ViewHolder extends RecyclerView.ViewHolder {
        public ImageView imgThumbnail;
        public TextView tvTitle;
        public TextView tvID;
        public TextView tvTime;
        public View item_view;
        public ViewHolder(View itemView) {
            super(itemView);
            imgThumbnail = (ImageView) itemView.findViewById(R.id.img_thumbnail);
            tvTitle = (TextView) itemView.findViewById(R.id.tv_title);
            //tvID = (TextView) itemView.findViewById(R.id.tv_id);
            tvTime = (TextView) itemView.findViewById(R.id.tv_time);
            item_view = itemView;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

I made a small mistake declaring String URL as static but it should be final also assign to another String variable. Finally set the adapter and notifyDataSetChanged where placed in onStart().


private final static String URL = "https://www.googleapis.com/youtube/v3/playlists?part=snippet&channelId=UCGyZswzm4G-wEfRQHgMSAuw&maxResults=50&key=AIzaSyCi0ApXYk08YpzyEO8jYJanaud-Epti6ks&pageToken=CDIQAQ";
    private String url = URL;

    JSONArray contacts = null;
    private String mNextToken;
    JSONObject jsonObj;
    private boolean loading = true;
    int visibleItemCount, totalItemCount, pastVisiblesItems;
    private List<PlayListItem> mContactList;
    private PlayListItem mContact;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
        mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
        mRecyclerView.setHasFixedSize(true);

        // Calling async task to get json
        if (mContactList == null)
            mContactList = new ArrayList<PlayListItem>();
        System.out.println("onCreate :: Size2---->" + mContactList.size());
    }

    @Override
    protected void onStart() {
        super.onStart();
        if (mContactList != null)
            mContactList.clear();
        url = URL;
        new GetContacts().execute();
        if (mAdapter == null)
            mAdapter = new CardAdapter(MainActivity.this, mContactList);
        mRecyclerView.setAdapter(mAdapter);
        mAdapter.notifyDataSetChanged();
        getScreenOrientation();
        System.out.println("onStart :: Size2---->" + mContactList.size());
    }

    @Override
    protected void onResume() {

        ActivitySwitcher.animationIn(findViewById(R.id.container_first),
                getWindowManager());
        super.onResume();
        System.out.println("onResume :: Size2---->" + mContactList.size());
        mAdapter.notifyDataSetChanged();
    }