如何解决正在下载数据但无法在 RecyclerView 上显示
大家好,我正在尝试使用 RSS 提要创建一个 Flickr 应用程序并从 RecylerView 显示它。我可以下载数据(我可以在 log cat 中看到链接),但在 RecyclerView 中看不到它们 我的 logcat 没有任何错误。
公共类 MainActivity 扩展 AppCompatActivity 实现 GetFlickrJsonData.OnDataAvailable { private static final String TAG = "MainActivity"; 私有 FlickrRecyclerViewAdapter mFlickrRecyclerViewAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.d(TAG,"onCreate: starts");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
mFlickrRecyclerViewAdapter = new FlickrRecyclerViewAdapter(this,new ArrayList<>());
recyclerView.setAdapter(mFlickrRecyclerViewAdapter);
tags=android,nougat,sdk&tagmode=any&format=json&nojsoncallback=1"); Log.d(TAG,"onCreate: 结束");
Log.d(TAG,"onCreate: ends");
}
@Override
protected void onResume() {
Log.d(TAG,"onResume: starts");
super.onResume();
GetFlickrJsonData getFlickrJsonData = new GetFlickrJsonData("https://api.flickr.com/services/feeds/photos_public.gne","en-us",true,this);
getFlickrJsonData.execute("android,nougat");
Log.d(TAG,"onResume: ends");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main,menu);
Log.d(TAG,"onCreateOptionsMenu returned: " + true);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
Log.d(TAG,"onOptionsItemSelected() returned: returned");
return super.onOptionsItemSelected(item);
}
@Override
public void onDataAvailable(List<Photo> data,DownloadStatus status) {
Log.d(TAG,"onDataAvailable: starts");
if (status == DownloadStatus.OK) {
mFlickrRecyclerViewAdapter.loadNewData(data);
} else {
// download or processing failed
Log.e(TAG,"onDataAvailable failed with status " + status);
}
Log.d(TAG,"onDataAvailable: ends");
}
}
class FlickrRecyclerViewAdapter 扩展 RecyclerView.Adapter
public FlickrRecyclerViewAdapter(Context context,List<Photo> photoList) {
mContext = context;
mPhotoList = photoList;
}
@NonNull
@Override
public FlickrImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
//Called by the layout manager when it needs a new view
Log.d(TAG,"onCreateViewHolder: new view requested");
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.browse,parent,false);
return new FlickrImageViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull FlickrImageViewHolder holder,int position) {
//Called by the layout manager when it wants new data in an existing row
Photo photoItem = mPhotoList.get(position);
Log.d(TAG,"onBindViewHolder: " + photoItem.getTitle() + " --> "+position );
Picasso.get().load(photoItem.getImage())
.error(R.drawable.placeholder2)
.placeholder(R.drawable.placeholder2)
.into(holder.thumbnail);
holder.title.setText(photoItem.getTitle());
}
@Override
public int getItemCount() {
Log.d(TAG,"getItemCount: called");
return ((mPhotoList != null) && (mPhotoList.size() != 0) ? mPhotoList.size() : 0);
}
void loadNewData (List<Photo> newPhotos){
mPhotoList = newPhotos;
notifyDataSetChanged();
}
public Photo getPhoto(int position){
return ((mPhotoList != null) && (mPhotoList.size() != 0) ? mPhotoList.get(position) : null);
}
static class FlickrImageViewHolder extends RecyclerView.ViewHolder {
private static final String TAG = "FlickrImageViewHolder";
ImageView thumbnail = null;
TextView title = null;
public FlickrImageViewHolder(@NonNull View itemView) {
super(itemView);
Log.d(TAG,"FlickrImageViewHolder: starts");
this.thumbnail =(ImageView) itemView.findViewById(R.id.thumbnail);
this.title = (TextView) itemView.findViewById(R.id.titleText);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。