我在ArchiveActivity
中有一个RecyclerView,它使用json填充,每件事情都可以,但是当我刷新刷新布局时,什么也没有发生,现在我的问题是,我怎么能检索新json
和填充RecyclerView
,并没有与setOnScrollListenerMethod
冲突:如何刷新RecyclerView,并刷新刷新布局时使用新的Json refreshLayout
这是activity_archive.xml
:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#e6e6e6"
tools:context=".activities.ArchiveActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/archiveToolbar"
android:background="#34465d"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"/>
<Button
android:id="@+id/btnVideo"
android:layout_below="@+id/archiveToolbar"
android:text="Video Activity"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh_layout_archive"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.RecyclerView
android:id="@+id/archiveRecylerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/btnVideo"/>
</android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>
,这是ArchiveActivity
:
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Color;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.majid.aparat.R;
import com.majid.aparat.adapter.ArchiveRecyclerAdapter;
import com.majid.aparat.app.AppController;
import com.majid.aparat.pojo.VideoData;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import android.os.Handler;
import android.widget.Toast;
public class ArchiveActivity extends AppCompatActivity {
// ============ Global Variables ================ //
ProgressDialog progressDialog;
List<VideoData> videoDataList = new ArrayList<VideoData>();
RecyclerView archiveRecyclerView;
ArchiveRecyclerAdapter adapter;
private String after_url;
private SwipeRefreshLayout swipeRefreshLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_archive);
String TAG = ArchiveActivity.class.getSimpleName();
setUpToolbar();
// ========== btn Video Activity =========== //
Button btnVideo = (Button) findViewById(R.id.btnVideo);
btnVideo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(ArchiveActivity.this, WatchActivity.class));
}
});
//======== SwipeRefreshLayout init ======//
swipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipe_refresh_layout_archive);
swipeRefreshLayout.setColorSchemeResources(R.color.red , R.color.green , R.color.blue);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
sendJsonRequest();
swipeRefreshLayout.setRefreshing(false);
}
} , 1500);
}
});
// ========================= sending jsonRequest ======================= //
sendJsonRequest();
showPD();
//========================= initialize recyclerView ===========================//
archiveRecyclerView = (RecyclerView) findViewById(R.id.archiveRecylerView);
archiveRecyclerView.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(ArchiveActivity.this);
archiveRecyclerView.setLayoutManager(linearLayoutManager);
archiveRecyclerView.setOnScrollListener(new EndlessRecyclerOnScrollListener(linearLayoutManager) {
@Override
public void onLoadMore(int current_page) {
loadMore();
Toast.makeText(ArchiveActivity.this , "onLoadMore is calling" , Toast.LENGTH_SHORT).show();
}
});
adapter = new ArchiveRecyclerAdapter(this, videoDataList);
archiveRecyclerView.setAdapter(adapter);
}
//========================= send json request ===========================//
private void sendJsonRequest() {
//========================= get Category intent ===========================//
Intent intent = getIntent();
String catUrl = intent.getStringExtra("category");
String fUrl = String.format("http://www.aparat.com//etc/api/categoryvideos/%s", catUrl);
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, fUrl, (String) null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
videoDataList.clear();
parsJsonResponse(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("TAG", error.toString());
}
});
AppController.getInstance().addToRequestQueue(request);
}
//========================= parse json response ===========================//
private void parsJsonResponse(JSONObject response) {
if (response != null) {
try {
JSONObject ui = response.getJSONObject("ui");
after_url = ui.getString("pagingForward");
JSONArray categoryViedeos = response.getJSONArray("lastvideos");
for (int i = 0; i < categoryViedeos.length(); i++) {
JSONObject currentVideo = categoryViedeos.getJSONObject(i);
VideoData viNew = new VideoData();
viNew.setVideoThumbnail(currentVideo.getString("small_poster"));
viNew.setVideoTitle(currentVideo.getString("title"));
viNew.setVideoCount(currentVideo.getString("visit_cnt"));
viNew.setVideoDate(currentVideo.getString("sdate"));
videoDataList.add(viNew);
}
adapter.addMoreItems(videoDataList);
hidePD();
} catch (JSONException e) {
e.printStackTrace();
}
adapter.notifyDataSetChanged();
}
}
//========================= LoadMore for infinitie scroll ===========================//
private void loadMore() {
//Toast.makeText(ArchiveActivity.this , "we are loading !!!" ,Toast.LENGTH_SHORT).show();
showPD();
JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, after_url, (String)null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
hidePD();
parsJsonResponse(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//Error
}
});
AppController.getInstance().addToRequestQueue(request);
}
//========================= setUpToolbar ===========================//
private void setUpToolbar() {
Intent intent = getIntent();
String catName = intent.getStringExtra("catName");
Toolbar archiveToolbar = (Toolbar) findViewById(R.id.archiveToolbar);
//Toast.makeText(this , catUrl , Toast.LENGTH_SHORT).show();
setSupportActionBar(archiveToolbar);
archiveToolbar.setTitleTextColor(Color.WHITE);
getSupportActionBar().setTitle(catName);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.mipmap.ic_left);
}
//========================= showPD Method ===========================//
private void showPD() {
if (progressDialog == null) {
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("در حال بارگزاری ");
progressDialog.setCancelable(false);
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.show();
}
}
//========================= hidePD Method ===========================//
private void hidePD() {
if (progressDialog != null) {
progressDialog.dismiss();
progressDialog = null;
}
}
}
,这是ArchiveRecyclerAdapter
:
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.majid.aparat.adapter.ArchiveRecyclerAdapter.ViewHolder;
import com.majid.aparat.pojo.VideoData;
import com.majid.aparat.R;
import java.util.List;
/**
* Created by majid on 18/01/2016.
*/
public class ArchiveRecyclerAdapter extends RecyclerView.Adapter<ArchiveRecyclerAdapter.ViewHolder> {
//================== Global Var
Context context;
List<VideoData> videoDataList ;
//=================== Constructor ============================= //
public ArchiveRecyclerAdapter(Context context , List<VideoData> videoDataList) {
this.context = context;
this.videoDataList = videoDataList;
}
//=================== ViewHolder ============================= //
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
private ImageView imgThumbnailVideo;
private TextView txtTitleVideo;
private TextView txtCountVideo;
private TextView txtDateVideo;
public ViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
imgThumbnailVideo = (ImageView)itemView.findViewById(R.id.imgThumnailVideo);
txtTitleVideo = (TextView)itemView.findViewById(R.id.txtVideoTitle);
txtDateVideo = (TextView)itemView.findViewById(R.id.txtVideoDate);
txtCountVideo = (TextView) itemView.findViewById(R.id.txtVideoCount);
}
@Override
public void onClick(View v) {
Toast.makeText(v.getContext() , txtTitleVideo.getText() , Toast.LENGTH_SHORT).show();
}
}
//=================== OnCreateViewHolder ============================= //
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View rootView = LayoutInflater.from(parent.getContext()).inflate(R.layout.video_item_row , null);
ViewHolder viewHolder = new ViewHolder(rootView);
return viewHolder;
}
//=================== onBindViewHolder ============================= //
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Context context = holder.itemView.getContext();
VideoData currentVideoData = videoDataList.get(position);
Glide.with(context).load(currentVideoData.getVideoThumbnail()).into(holder.imgThumbnailVideo);
holder.txtTitleVideo.setText(currentVideoData.getVideoTitle());
holder.txtCountVideo.setText(currentVideoData.getVideoCount());
holder.txtDateVideo.setText(currentVideoData.getVideoDate());
}
//=================== getItemCount ============================= //
@Override
public int getItemCount() {
return videoDataList.size();
}
//=================== addMoreItems ========================== //
public void addMoreItems(List<VideoData> videoDataList){
this.videoDataList.addAll(videoDataList);
}
}
显示'ArchiveRecyclerAdapter'类代码也 –
之前调用
addMoreItems
方法parsJsonResponse
在你的'addMoreItems'刷新你的适配器 – Piyush,我可以删除'adapter.notify'之后,我的意思是parseJsonResponse –