Android 当滚动浏览提要时,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

我正在开发一个西班牙语新闻应用程序,请参见此处:

该应用程序的问题在于,每当任何用户单击“喜欢”、“播放音频”或“翻译”按钮时,recyclerView就会跳到顶部

  • 数据以片段形式从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);
        }
    }