2015-11-02 74 views
0

我有一個使用json webservices的recyclerview自定義適配器。我不得不逐一解析url,並使用onscrolllistener()顯示cardview。我的問題是,當我按下後退按鈕,並在最近的應用程序(當時onResume調用)打開後,它將只顯示調用onPause時調用的URL。所以當我打電話給onResume時,我怎麼能刷新列表視圖。當我按下按鈕時,如何使用onResume和onPause方法

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; 
     } 
    } 
} 
+0

你要刷新列表中的onResume()? – activesince93

+0

您是否嘗試通知適配器有關任何更改?嘗試將此代碼添加到您的onResume()'mAdapter.notifyDataSetChanged();' – mgcaguioa

+0

是的。我需要刷新@activesince93 –

回答

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(); 
    } 
相關問題