Android 当滚动浏览提要时,RecyclerView跳转到顶部
我正在开发一个西班牙语新闻应用程序,请参见此处: 该应用程序的问题在于,每当任何用户单击“喜欢”、“播放音频”或“翻译”按钮时,recyclerView就会跳到顶部Android 当滚动浏览提要时,RecyclerView跳转到顶部,android,android-recyclerview,recyclerview-layout,Android,Android Recyclerview,Recyclerview Layout,我正在开发一个西班牙语新闻应用程序,请参见此处: 该应用程序的问题在于,每当任何用户单击“喜欢”、“播放音频”或“翻译”按钮时,recyclerView就会跳到顶部 数据以片段形式从Firebase实时数据库中获取。请帮忙 @凌驾 创建视图上的公共视图(布局、充气机、视图组容器、, Bundle savedInstanceState){ //为该碎片膨胀布局 mView=充气机。充气(R.layout.fragment_feed,container,false) MobileAds.initi
- 数据以片段形式从Firebase实时数据库中获取。请帮忙
- @凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
mView=充气机。充气(R.layout.fragment_feed,container,false)
MobileAds.initialize(mView.getContext(),“XXXXXXXXX”); mrewardvideoad=MobileAds.getRewardedVideoAdInstance(mView.getContext()); mrewardvideoad.setRewardedVideoAdListener(此); loadRewardedVideoAd(); mAuth=FirebaseAuth.getInstance(); feedRecycler=mView.findViewById(R.id.recycler\u feed); setLayoutManager(新的LinearLayoutManager(getContext()); RecyclerView.Adapter Adapter=新的FeedAdapter(mView.getContext(),mRecyclerViewItems); 饲料回收器。设置适配器(适配器); userImage=mView.findviewbyd(R.id.feed\u img); username=mView.findviewbyd(R.id.feed\u name); usercomment=mView.findviewbyd(R.id.feed\u edittext); subMitComment=mView.findviewbyd(R.id.feed\u submit); mUSerCmt=FirebaseDatabase.getInstance().getReference().child(“提要”); mScoreRef=FirebaseDatabase.getInstance().getReference().child(“分数”); if(mAuth.getCurrentUser().getPhotoUrl()!=null){ Picasso.get().load(mAuth.getCurrentUser().getPhotoUrl().toString()).into(userImage); username.setText(mAuth.getCurrentUser().getDisplayName()); }否则{ startActivity(新意图(mView.getContext(),UserProfile.class)); } subMitComment.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图v){ 字符串usercmt=usercomment.getText().toString(); 如果(!usercmt.equals(“”){ writeNewPost(usercmt,mAuth.getUid(),mAuth.getCurrentUser().getDisplayName(),mAuth.getCurrentUser().getPhotoUrl().toString()); Toast.makeText(mView.getContext(),“注释已更新!”,Toast.LENGTH\u SHORT.show(); } usercomment.setText(“”); } }); mUSerCmt.orderByChild(“时间戳”).addValueEventListener(新的ValueEventListener(){ @凌驾 public void onDataChange(@NonNull DataSnapshot DataSnapshot){ mrecycerviceItems.clear(); 对于(DataSnapshot dataSnapshot1:DataSnapshot.getChildren()){ Model\u Feed epiModel=dataSnapshot1.getValue(Model\u Feed.class); mrecycerviceItems.add(epiModel); } FeedAdapter=新的FeedAdapter(mView.getContext(),mrecyclServiceItems); feedRecycler.setAdapter(FeedAdapter); FeedAdapter.notifyDataSetChanged(); } @凌驾 已取消的公共void(@NonNull DatabaseError DatabaseError){ } }); 返回mView; } 私有void writeNewPost(字符串sen、字符串uid、字符串名称、字符串img){ //在/user posts/$userid/$postd和 ///posts/$posted String key=mUSerCmt.push().getKey(); 长时间=System.currentTimeMillis()*(-1); Model_Feed post=新的Model_Feed(sen、time、uid、name、img、key); Map postValues=post.toMap(); Map childUpdates=newhashmap(); childUpdates.put(键、postValues); 博物馆更新儿童(儿童更新); } 公共类FeedAdapter扩展了RecyclerView.Adapter{ 私人语境; 私有列表mrecycervicewitems; 公共FeedAdapter(上下文上下文,列表MRECYCLerviceItems){ this.context=上下文; this.mrecyclevietems=mrecyclevietems; } @非空 @凌驾 public FeedViewHolder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){ LayoutFlater充气机=LayoutFlater.from(上下文); 视图=充气机。充气(R.layout.rec_words,viewGroup,false); 返回新的FeedViewHolder(视图); } @凌驾 BindViewHolder上的公共无效(@NonNull final FeedViewHolder FeedViewHolder,int i){ 最终的Model_Feed modelFeed=(Model_Feed)mrecyclewitems.get(i); Picasso.get().load(modelFeed.getImg())。放入(feedViewHolder.circleImageView); feedViewHolder.nameWord.setText(modelFeed.getName()); feedViewHolder.statusword.setText(modelFeed.getSen()); feedViewHolder.fireword.setText(String.valueOf(modelFeed.fires.size()); feedViewHolder.playword.setText(String.valueOf(modelFeed.plays.size()); if(modelFeed.fires.containsKey(mAuth.getUid())){ feedViewHolder.fireimage.setImageDrawable(getResources().getDrawable(R.drawable.fire)); } if(modelFeed.plays.containsKey(mAuth.getUid())){ feedViewHolder.playimage.setImageDrawable(getResources().getDrawable(R.drawable.play_按钮)); } feedViewHolder.fireLinear.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图v){ feedViewHolder.fireimage.setImageDrawable(getResources().getDrawable(R.drawable.fire)); onficlicked(mUSerCmt.child(modelFeed.getKey()),modelFeed.getUid()); } }); feedViewHolder.playLinear.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图v){ feedViewHolder.playimage.setImageDrawable(getResources().getDrawable(R.drawable.play_按钮)); sen_sound=modelFeed.getSen(); mScoreRef.child(mAuth.getUid()).addListenerForSingleValueEvent(新值EventListener()){ @凌驾 public void onDataChange(@NonNull DataSnapshot DataSnapshot){ 最终模型
MobileAds.initialize(mView.getContext(), "XXXXXXXXX"); mRewardedVideoAd = MobileAds.getRewardedVideoAdInstance(mView.getContext()); mRewardedVideoAd.setRewardedVideoAdListener(this); loadRewardedVideoAd(); mAuth = FirebaseAuth.getInstance(); feedRecycler = mView.findViewById(R.id.recycler_feed); feedRecycler.setLayoutManager(new LinearLayoutManager(getContext())); RecyclerView.Adapter adapter = new FeedAdapter(mView.getContext(),mRecyclerViewItems); feedRecycler.setAdapter(adapter); userImage = mView.findViewById(R.id.feed_img); username = mView.findViewById(R.id.feed_name); usercomment = mView.findViewById(R.id.feed_edittext); subMitComment = mView.findViewById(R.id.feed_submit); mUSerCmt = FirebaseDatabase.getInstance().getReference().child("feeds"); mScoreRef = FirebaseDatabase.getInstance().getReference().child("scores"); if(mAuth.getCurrentUser().getPhotoUrl()!= null) { Picasso.get().load(mAuth.getCurrentUser().getPhotoUrl().toString()).into(userImage); username.setText(mAuth.getCurrentUser().getDisplayName()); } else { startActivity(new Intent(mView.getContext(),UserProfile.class)); } subMitComment.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String usercmt = usercomment.getText().toString(); if(!usercmt.equals("")){ writeNewPost(usercmt,mAuth.getUid(),mAuth.getCurrentUser().getDisplayName(),mAuth.getCurrentUser().getPhotoUrl().toString()); Toast.makeText(mView.getContext(),"Comment updated!",Toast.LENGTH_SHORT).show(); } usercomment.setText(""); } }); mUSerCmt.orderByChild("timestamp").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { mRecyclerViewItems.clear(); for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) { Model_Feed epiModel = dataSnapshot1.getValue(Model_Feed.class); mRecyclerViewItems.add(epiModel); } FeedAdapter = new FeedAdapter(mView.getContext(), mRecyclerViewItems); feedRecycler.setAdapter(FeedAdapter); FeedAdapter.notifyDataSetChanged(); } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); return mView; } private void writeNewPost(String sen, String uid, String name, String img) { // Create new post at /user-posts/$userid/$postid and at // /posts/$postid simultaneously String key = mUSerCmt.push().getKey(); long time = System.currentTimeMillis() * (-1); Model_Feed post = new Model_Feed(sen,time,uid, name, img,key); Map<String, Object> postValues = post.toMap(); Map<String, Object> childUpdates = new HashMap<>(); childUpdates.put(key, postValues); mUSerCmt.updateChildren(childUpdates); } public class FeedAdapter extends RecyclerView.Adapter<FeedAdapter.FeedViewHolder>{ private Context context; private List<Object> mRecyclerViewItems; public FeedAdapter(Context context, List<Object> mRecyclerViewItems) { this.context = context; this.mRecyclerViewItems = mRecyclerViewItems; } @NonNull @Override public FeedViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { LayoutInflater inflater = LayoutInflater.from(context); View view = inflater.inflate(R.layout.rec_words,viewGroup,false); return new FeedViewHolder(view); } @Override public void onBindViewHolder(@NonNull final FeedViewHolder feedViewHolder, int i) { final Model_Feed modelFeed = (Model_Feed) mRecyclerViewItems.get(i); Picasso.get().load(modelFeed.getImg()).into(feedViewHolder.circleImageView); feedViewHolder.nameWord.setText(modelFeed.getName()); feedViewHolder.statusword.setText(modelFeed.getSen()); feedViewHolder.fireword.setText(String.valueOf(modelFeed.fires.size())); feedViewHolder.playword.setText(String.valueOf(modelFeed.plays.size())); if(modelFeed.fires.containsKey(mAuth.getUid())){ feedViewHolder.fireimage.setImageDrawable(getResources().getDrawable(R.drawable.fire)); } if(modelFeed.plays.containsKey(mAuth.getUid())){ feedViewHolder.playimage.setImageDrawable(getResources().getDrawable(R.drawable.play_button)); } feedViewHolder.fireLinear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { feedViewHolder.fireimage.setImageDrawable(getResources().getDrawable(R.drawable.fire)); onFireClicked(mUSerCmt.child(modelFeed.getKey()),modelFeed.getUid()); } }); feedViewHolder.playLinear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { feedViewHolder.playimage.setImageDrawable(getResources().getDrawable(R.drawable.play_button)); sen_sound = modelFeed.getSen(); mScoreRef.child(mAuth.getUid()).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { final Model_Score modelScore = dataSnapshot.getValue(Model_Score.class); long scoreCheck = modelScore.getScore(); if (scoreCheck < 1 ){ AlertDialog.Builder builder; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { builder = new AlertDialog.Builder(context, android.R.style.Theme_Material_Dialog_Alert); } else { builder = new AlertDialog.Builder(context); } builder.setTitle("Insufficient Coins") .setMessage("You've insufficient coins in your wallet to listen this audio, Watch a reward video complete and get 50 coins.") .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { long score = modelScore.getScore() + 5; Model_Score modelScore1 = new Model_Score(score, modelScore.getReput(), mAuth.getUid()); mScoreRef.child(mAuth.getUid()).setValue(modelScore1); } scorez = modelScore.getScore(); reputz = modelScore.getReput(); }) .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Toast.makeText(mView.getContext(),"Our Apologies for inconvenience",Toast.LENGTH_SHORT).show(); } }) .setIcon(android.R.drawable.ic_dialog_alert) .show(); }else { long score = modelScore.getScore() - 10; Model_Score modelScore1 = new Model_Score(score, modelScore.getReput(), mAuth.getUid()); mScoreRef.child(mAuth.getUid()).setValue(modelScore1); } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); } }); } @Override public int getItemCount() { return mRecyclerViewItems.size(); } public class FeedViewHolder extends RecyclerView.ViewHolder{ CircleImageView circleImageView; TextView nameWord, statusword,fireword,playword; LinearLayout fireLinear, playLinear; ImageView fireimage, playimage; public FeedViewHolder(@NonNull View itemView) { super(itemView); circleImageView = itemView.findViewById(R.id.word_image); nameWord = itemView.findViewById(R.id.word_name); statusword = itemView.findViewById(R.id.word_status); fireword = itemView.findViewById(R.id.word_text_fire); playword = itemView.findViewById(R.id.word_text_play); fireLinear = itemView.findViewById(R.id.word_fire_linear); playLinear = itemView.findViewById(R.id.word_play_linear); fireimage = itemView.findViewById(R.id.word_img_fire); playimage = itemView.findViewById(R.id.word_img_play); } } } void sendReward(long scores, long reputs){ long score = scores + 50; Model_Score modelScore1 = new Model_Score(score, reputs, mAuth.getUid()); mScoreRef.child(mAuth.getUid()).setValue(modelScore1); } void showToast(String msg){ Toast.makeText(mView.getContext(),msg,Toast.LENGTH_SHORT).show(); } private void onFireClicked(DatabaseReference postRef, final String cr_uid) { postRef.runTransaction(new Transaction.Handler() { @Override public Transaction.Result doTransaction(MutableData mutableData) { Model_Feed p = mutableData.getValue(Model_Feed.class); if (p == null) { return Transaction.success(mutableData); } if (p.fires.containsKey(mAuth.getUid())) { // Unstar the post and remove self from stars p.firecount = p.firecount - 1; p.fires.remove(mAuth.getUid()); } else { // Star the post and add self to stars p.firecount = p.firecount + 1; p.fires.put(mAuth.getUid(), true); mScoreRef.child(cr_uid).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { Model_Score modelScore = dataSnapshot.getValue(Model_Score.class); long reput = modelScore.getReput(); Model_Score modelScore1 = new Model_Score(modelScore.getScore(), reput + 10, cr_uid); mScoreRef.child(cr_uid).setValue(modelScore1); } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }); } // Set value and report transaction success mutableData.setValue(p); return Transaction.success(mutableData); } @Override public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) { // Transaction completed //Log.d(TAG, "postTransaction:onComplete:" + databaseError); } }); } private void onPlayClicked(DatabaseReference postRef) { postRef.runTransaction(new Transaction.Handler() { @Override public Transaction.Result doTransaction(MutableData mutableData) { Model_Feed p = mutableData.getValue(Model_Feed.class); if (p == null) { return Transaction.success(mutableData); } if (p.plays.containsKey(mAuth.getUid())) { // Unstar the post and remove self from stars p.playcount = p.playcount + 1; p.plays.put(mAuth.getUid() + p.playcount,true); new readSen().execute(); } else { // Star the post and add self to stars p.playcount = p.playcount + 1; p.plays.put(mAuth.getUid(), true); } // Set value and report transaction success mutableData.setValue(p); return Transaction.success(mutableData); } @Override public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) { // Transaction completed //Log.d(TAG, "postTransaction:onComplete:" + databaseError); } }); }
mUSerCmt.orderByChild("timestamp").addValueEventListener( ... )
public class FeedAdapter extends RecyclerView.Adapter<FeedAdapter.FeedViewHolder> { // ... public void setItems(List<Object> items) { mRecyclerViewItems = items; } // ... }
@Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { mRecyclerViewItems.clear(); for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) { Model_Feed epiModel = dataSnapshot1.getValue(Model_Feed.class); mRecyclerViewItems.add(epiModel); } if (FeedAdapter != null) { FeedAdapter.setItems(mRecyclerViewItems); FeedAdapter. notifyDataSetChanged(); } else { FeedAdapter = new FeedAdapter(mView.getContext(), mRecyclerViewItems); feedRecycler.setAdapter(FeedAdapter); } }