我正在亚马逊Fire TV上开发.
因为它是一个电视应用程序(没有触摸),我需要在行的布局内的焦点能够导航.
我有一个非常简单Recyclerview的图像,文字和可聚焦.当我向上或向下按压时,它都会正确滚动和填充,但是我注意到当我导航速度快于滚动可以跟上时,它会创建新的视图(关闭屏幕)并延迟UI.
我创建了一个包含Creation数字的活动.当我慢慢滚动时,最高的创作#是10.但是当我快速滚动时,我会在一秒内获得创作号为60的卡片.这会导致巨大的延迟,并且应用程序会丢失大量帧.我的做法完全错了吗?
使用下面的代码来测试它.
/**
* Created by sylversphere on 15-04-15.
*/
public class LandfillActivity extends Activity{
private Context context;
private static int ticketNumber;
private static int getTicket(){
ticketNumber ++;
return ticketNumber;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
setContentView(R.layout.landfill_activity);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
GridLayoutManager glm = new GridLayoutManager(context, 2);
recyclerView.setLayoutManager(glm);
SickAdapter sickAdapter = new SickAdapter();
recyclerView.setAdapter(sickAdapter);
}
public class SickViewHolder extends RecyclerView.ViewHolder{
TextView ticketDisplayer;
public ImageView imageView;
public SickViewHolder(View itemView) …Run Code Online (Sandbox Code Playgroud) 所以我在用户页面上,我想让用户在服务器端创建一个帖子但是扇出.
exports.fanoutUpdatePost = functions.database.ref('/post/{postKey}').onWrite(event => {
var post = event.data.val();
var fanoutObject = {};
fanoutObject['/user-post/'+post.userKey+'/post/'+event.params.postKey] = post;
fanoutObject['/blog-post/'+post.blogKey+'/post/'+event.params.postKey] = post;
return event.data.adminRef.root.update(fanoutObject);
});
Run Code Online (Sandbox Code Playgroud)
我这样做,所以你可以发布,/post/服务器将自动扇出.问题是我希望客户端显示进度条,直到它被保存为止/user-post/.
但是我的客户端回调在创建帖子后立即触发/post/.
public void addPost(final PostDao post, ProgressBar progressBar) {
progressBar.setVisibility(View.VISIBLE);
String key = mDatabase.child(“post”).push().getKey();
Map<String, Object> postUpdateMap = new HashMap<>();
postUpdateMap.put(“/post/” +key, post.toMap());
mDatabase.updateChildren(postUpdateMap, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
if(databaseError == null){
Log.e(TAG, databaseError);
}else{
// @@@@@ This executes before server side
// @@@@@ …Run Code Online (Sandbox Code Playgroud)