Android 当我使用RecyclerView和改装时,如何加载更多?
我想为一个网站开发android应用程序。我从Android 当我使用RecyclerView和改装时,如何加载更多?,android,android-recyclerview,retrofit,infinite-scroll,endlessscroll,Android,Android Recyclerview,Retrofit,Infinite Scroll,Endlessscroll,我想为一个网站开发android应用程序。我从json阅读网站帖子,每10篇帖子在RecyclerView中显示一次,当用户在RecyclerView上滚动时,会显示更多的10篇帖子并进入结尾! 我是一名业余爱好者,我写了下面的代码,但我不知道在滚动到结尾并展示我的数据时要阅读更多的数据!(我想在任何页面中显示任何10篇帖子)。 API链接: publicNewAdapter(列表文档、int行布局、上下文){ this.docs=docs; this.rowLayout=rowLayout;
json
阅读网站帖子,每10篇帖子在RecyclerView
中显示一次,当用户在RecyclerView上滚动时,会显示更多的10篇帖子并进入结尾!
我是一名业余爱好者,我写了下面的代码,但我不知道在滚动到结尾并展示我的数据时要阅读更多的数据!(我想在任何页面中显示任何10篇帖子)。
API链接:
publicNewAdapter(列表文档、int行布局、上下文){
this.docs=docs;
this.rowLayout=rowLayout;
this.context=上下文;
}
@凌驾
public NewViewHolder onCreateViewHolder(视图组父级,int-viewType){
v=LayoutInflater.from(parent.getContext()).flate(rowLayout,parent,false);
返回新的视图持有者(v);
}
@凌驾
public void onBindViewHolder(最终的NewViewHolder,最终的int位置){
doc=docs.get(位置);
holder.tvTitle.setText(doc.getHeadline().getMain());
holder.tvDate.setText(doc.getPubDate());
holder.tvDescription.setText(doc.getSnippet());
if(docs.get(position.getMultimedia().size()>0){
Glide.with(context).load(url+doc.getMultimedia().get(0.getUrl())
.缩略图(0.5f)
.占位符(R.drawable.ic\U close\U black\U 24dp)
.diskCacheStrategy(diskCacheStrategy.ALL)
.错误(R.drawable.ic\U close\U black\U 24dp)
.插入(支架、海报);
}
holder.newLayout.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(上下文,WebViewActivity.class);
intent.addFlags(intent.FLAG\u活动\u新任务);
intent.putExtra(“web_url”,docs.get(position.getWebUrl());
背景。开始触觉(意图);
}
});
}
@凌驾
public int getItemCount(){
返回单据==null?0:docs.size();
}
公共类NewViewHolder扩展了RecyclerView.ViewHolder{
线性布局新布局;
文本视图标题;
文本视图描述;
文本视图日期;
ImageView海报;
公共新视图持有者(视图项视图){
超级(项目视图);
newLayout=(LinearLayout)itemView.findViewById(R.id.new_布局);
tvDate=(TextView)itemView.findViewById(R.id.tvDate);
tvTitle=(TextView)itemView.findViewById(R.id.tvTitle);
tvDescription=(TextView)itemView.findViewById(R.id.tvDescription);
ivPoster=(ImageView)itemView.findViewById(R.id.ivPoster);
}
}
主要活动
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
newDocs=(List)getIntent().getSerializableExtra(“Doc”);
change=getIntent().getBooleanExtra(“change”,false);
init();
setToolbar();
setContent();
//Xétđiề吴琪ện thayđổ我
如果(更改){
如果(newDocs.size()>0){
Toast.makeText(MainActivity.this,“Data”,Toast.LENGTH_SHORT.show();
}否则{
Toast.makeText(MainActivity.this,“空”,Toast.LENGTH_SHORT.show();
}
setRecycleView(新文档);
}
getData();
}
@凌驾
public void onBackPressed(){
抽屉布局抽屉=(抽屉布局)findViewById(R.id.抽屉布局);
if(抽屉isDrawerOpen(重力压缩机启动)){
抽屉。关闭抽屉(重力压缩机启动);
}否则{
super.onBackPressed();
}
}
私有void setToolbar(){
设置支持操作栏(工具栏);
}
//函数xác nhận dữ 锂ệu trả về 身份证件
私有void init(){
toolbar=(toolbar)findviewbyd(R.id.toolbar);
mRecyclerView=(RecyclerView)findViewById(R.id.new\u recycler\u视图);
refreshLayout=(SwipeRefreshLayout)findViewById(R.id.srlMain);
抽屉=(抽屉布局)findViewById(R.id.抽屉布局);
navigationView=(navigationView)findViewById(R.id.nav_视图);
}
私有void setContent(){
toggle=newactionBarDrawerToggle(这个,抽屉,工具栏,R.string.navigation\u drawer\u open,R.string.navigation\u drawer\u close);
抽屉。设置抽屉定位器(开关);
toggle.syncState();
navigationView.setNavigationItemSelectedListener(此);
refreshLayout.setOnRefreshListener(此);
//设置回收视图
mRecyclerView.setNestedScrollingEnabled(false);
最终直线布局经理mLayoutManager;
mLayoutManager=新的LinearLayoutManager(此);
mRecyclerView.setLayoutManager(mllayoutmanager);
setLayoutManager(新的GridLayoutManager(this,3));
}
//函数lấy-dữ 锂ệu回收视图
私有void setRecycleView(列表){
newAdapter=newnewadapter(list,R.layout.new_listitems,MainActivity.this);
newAdapter.notifyDataSetChanged();
mRecyclerView.setAdapter(newAdapter);
}
//函数nhận dữ 锂ệU
私有void getData(){
APIinterface apiSevice=APIClient.getClient().create(APIinterface.class);
Call Call=apiSevice.getHotNew(API_键);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.issusccessful()){
docs=response.body().getNewResponse().getDocs();
如果(!更改){
setRecycleView(文档);
}
}否则{
Toast.makeText(MainActivity.this,“Error”,Toast.LENGTH_SHORT.show();
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Toast.makeText(MainActivity.this,“Internet未连接”,Toast.LENGTH_SHORT.show();
}
});
}
//函数tạo博士ần选项菜单
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。主菜单,菜单);
MenuItem searchItem=menu.findItem(R.id
public NewAdapter(List<Doc> docs, int rowLayout, Context context) {
this.docs = docs;
this.rowLayout = rowLayout;
this.context = context;
}
@Override
public NewViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
v = LayoutInflater.from(parent.getContext()).inflate(rowLayout, parent, false);
return new NewViewHolder(v);
}
@Override
public void onBindViewHolder(final NewViewHolder holder, final int position) {
doc = docs.get(position);
holder.tvTitle.setText(doc.getHeadline().getMain());
holder.tvDate.setText(doc.getPubDate());
holder.tvDescription.setText(doc.getSnippet());
if (docs.get(position).getMultimedia().size() > 0) {
Glide.with(context).load(url + doc.getMultimedia().get(0).getUrl())
.thumbnail(0.5f)
.placeholder(R.drawable.ic_close_black_24dp)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.error(R.drawable.ic_close_black_24dp)
.into(holder.ivPoster);
}
holder.newLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, WebViewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("web_url", docs.get(position).getWebUrl());
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return docs == null ? 0 : docs.size();
}
public class NewViewHolder extends RecyclerView.ViewHolder {
LinearLayout newLayout;
TextView tvTitle;
TextView tvDescription;
TextView tvDate;
ImageView ivPoster;
public NewViewHolder(View itemView) {
super(itemView);
newLayout = (LinearLayout) itemView.findViewById(R.id.new_layout);
tvDate = (TextView) itemView.findViewById(R.id.tvDate);
tvTitle = (TextView) itemView.findViewById(R.id.tvTitle);
tvDescription = (TextView) itemView.findViewById(R.id.tvDescription);
ivPoster = (ImageView) itemView.findViewById(R.id.ivPoster);
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
newDocs = (List<Doc>) getIntent().getSerializableExtra("Doc");
change = getIntent().getBooleanExtra("change", false);
init();
setToolbar();
setContent();
//Xét điều kiện thay đổi
if (change) {
if (newDocs.size() > 0) {
Toast.makeText(MainActivity.this, "Data", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "Empty", Toast.LENGTH_SHORT).show();
}
setRecycleView(newDocs);
}
getData();
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
super.onBackPressed();
}
}
private void setToolbar() {
setSupportActionBar(toolbar);
}
//Function xác nhận dữ liệu trả về id
private void init() {
toolbar = (Toolbar) findViewById(R.id.toolbar);
mRecyclerView = (RecyclerView) findViewById(R.id.new_recycler_view);
refreshLayout = (SwipeRefreshLayout) findViewById(R.id.srlMain);
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
navigationView = (NavigationView) findViewById(R.id.nav_view);
}
private void setContent() {
toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
navigationView.setNavigationItemSelectedListener(this);
refreshLayout.setOnRefreshListener(this);
//Set Recyclerview
mRecyclerView.setNestedScrollingEnabled(false);
final LinearLayoutManager mLayoutManager;
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3));
}
//Function lấy dữ liệu RecyclerView
private void setRecycleView(List<Doc> list) {
newAdapter = new NewAdapter(list, R.layout.new_listitems, MainActivity.this);
newAdapter.notifyDataSetChanged();
mRecyclerView.setAdapter(newAdapter);
}
//Function nhận dữ liệu
private void getData() {
APIinterface apiSevice = APIClient.getClient().create(APIinterface.class);
Call<Resonpe> call = apiSevice.getHotNew(API_KEY);
call.enqueue(new Callback<Resonpe>() {
@Override
public void onResponse(Call<Resonpe> call, Response<Resonpe> response) {
if (response.isSuccessful()) {
docs = response.body().getNewResponse().getDocs();
if (!change) {
setRecycleView(docs);
}
} else {
Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<Resonpe> call, Throwable t) {
Toast.makeText(MainActivity.this, "Internet is not connected", Toast.LENGTH_SHORT).show();
}
});
}
//Function tạo phần OptionMenu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
return super.onCreateOptionsMenu(menu);
}
//Function xử lý sự kiên click items của Option
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
refreshLayout.setRefreshing(false);
if (change) {
setRecycleView(newDocs);
} else {
setRecycleView(docs);
}
}
}, 2500);
}
// Function xử lý sự kiên click items của NavigationView
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
newDocs = new ArrayList<>();
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_camera) {
for (Doc doc : docs) {
if (doc.getNewDesk().equals("Sport")) {
newDocs.add(doc);
}
}
} else if (id == R.id.nav_gallery) {
for (Doc doc : docs) {
if (doc.getNewDesk().equals("Fashion")) {
newDocs.add(doc);
}
}
} else if (id == R.id.nav_slideshow) {
for (Doc doc : docs) {
if (doc.getNewDesk().equals("Arts")) {
newDocs.add(doc);
}
}
} else if (id == R.id.nav_manage) {
for (Doc doc : docs) {
if (doc.getNewDesk().equals("None")) {
newDocs.add(doc);
}
}
}
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("Doc", (Serializable) newDocs);
intent.putExtra("change", true);
startActivity(intent);
finish();
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}