Android 如何在viewpager中实现类似按钮的概念?

Android 如何在viewpager中实现类似按钮的概念?,android,android-viewpager,Android,Android Viewpager,我有一个显示图像的viewpager,在它下面,我添加了一个like按钮。我可以处理setOnClickListener并获取视图的位置,并增加类似的值 问题是,在喜欢某个项目后,当我到达viewPager的最后一个项目时,即我按下“喜欢”按钮的项目,其值会回到原来的项目。当我刷新片段时,该项正在更新为其新的类似值 如何在viewPager的适配器中处理视图的动态刷新 这就是我尝试过的 PageAdapter.java @Override public int getItemPo

我有一个显示图像的viewpager,在它下面,我添加了一个like按钮。我可以处理
setOnClickListener
并获取视图的位置,并增加类似的值

问题是,在喜欢某个项目后,当我到达viewPager的最后一个项目时,即我按下“喜欢”按钮的项目,其值会回到原来的项目。当我刷新片段时,该项正在更新为其新的类似值

如何在viewPager的适配器中处理视图的动态刷新

这就是我尝试过的

PageAdapter.java

    @Override
    public int getItemPosition(final Object object) {
        return PagerAdapter.POSITION_NONE;
    }

    @Override
    public Object instantiateItem(final ViewGroup container, final int position) {
        final View view;

        view = mLayoutInflater.inflate(R.layout.item, container, false);
        setupItem(view, LIBRARIES[position]);
        Utils.LibraryObject libraryObject = LIBRARIES[position];

        ImageButton b = (ImageButton) view.findViewById(R.id.like);

        b.setOnClickListener(v -> addlike(libraryObject, view));
        /* In this function i take the value from the textview, increment it and set its value */

        container.addView(view);
        return view;
    }

    private void addLike(Utils.LibraryObject libraryObject, View view) {

        DatabaseReference usersDb = FirebaseDatabase.getInstance().getReference().child("Users");
        usersDb.keepSynced(true);
        TextView likeCount = (TextView) view.findViewById(R.id.likeCount);
        ImageButton like = (ImageButton)view.findViewById(R.id.like);

        // User adds like and increase value in firebase
        usersDb.child(libraryObject.getUserID()).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if(dataSnapshot.child("likes").exists())
                {
                    int temp;
                    int like = Integer.parseInt(likeCount.getText().toString());
                    temp = like + 1;

                    usersDb.child(libraryObject.getUserID()).child("like").setValue(temp);
                    likeCount.setText(String.valueOf(temp));
                    usersDb.child(libraryObject.getUserID()).removeEventListener(this);
                    like.setClickable(false);
                    like.setEnabled(false);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }
我使用firebase作为后端来存储用户详细信息


能否从适配器类本身更新适配器?或者,如何从片段本身单击viewPager按钮?

在更新值时只需调用
notifyDataSetChanged

您编辑的代码

@Override
    public int getItemPosition(final Object object) {
        return PagerAdapter.POSITION_NONE;
    }

    @Override
    public Object instantiateItem(final ViewGroup container, final int position) {
        final View view;

        view = mLayoutInflater.inflate(R.layout.item, container, false);
        setupItem(view, LIBRARIES[position]);
        Utils.LibraryObject libraryObject = LIBRARIES[position];

        ImageButton b = (ImageButton) view.findViewById(R.id.like);

        b.setOnClickListener(v -> addlike(libraryObject, view));
        /* In this function i take the value from the textview, increment it and set its value */

        container.addView(view);
        return view;
    }

    private void addLike(Utils.LibraryObject libraryObject, View view) {

        DatabaseReference usersDb = FirebaseDatabase.getInstance().getReference().child("Users");
        usersDb.keepSynced(true);
        TextView likeCount = (TextView) view.findViewById(R.id.likeCount);
        ImageButton like = (ImageButton)view.findViewById(R.id.like);

        // User adds like and increase value in firebase
        usersDb.child(libraryObject.getUserID()).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if(dataSnapshot.child("likes").exists())
                {
                    int temp;
                    int like = Integer.parseInt(likeCount.getText().toString());
                    temp = like + 1;

                    usersDb.child(libraryObject.getUserID()).child("like").setValue(temp);
                    likeCount.setText(String.valueOf(temp));
                    notifyDataSetChanged()
                    usersDb.child(libraryObject.getUserID()).removeEventListener(this);
                    like.setClickable(false);
                    like.setEnabled(false);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }

更新值时,只需调用
notifyDataSetChanged
即可了解更多信息

您编辑的代码

@Override
    public int getItemPosition(final Object object) {
        return PagerAdapter.POSITION_NONE;
    }

    @Override
    public Object instantiateItem(final ViewGroup container, final int position) {
        final View view;

        view = mLayoutInflater.inflate(R.layout.item, container, false);
        setupItem(view, LIBRARIES[position]);
        Utils.LibraryObject libraryObject = LIBRARIES[position];

        ImageButton b = (ImageButton) view.findViewById(R.id.like);

        b.setOnClickListener(v -> addlike(libraryObject, view));
        /* In this function i take the value from the textview, increment it and set its value */

        container.addView(view);
        return view;
    }

    private void addLike(Utils.LibraryObject libraryObject, View view) {

        DatabaseReference usersDb = FirebaseDatabase.getInstance().getReference().child("Users");
        usersDb.keepSynced(true);
        TextView likeCount = (TextView) view.findViewById(R.id.likeCount);
        ImageButton like = (ImageButton)view.findViewById(R.id.like);

        // User adds like and increase value in firebase
        usersDb.child(libraryObject.getUserID()).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if(dataSnapshot.child("likes").exists())
                {
                    int temp;
                    int like = Integer.parseInt(likeCount.getText().toString());
                    temp = like + 1;

                    usersDb.child(libraryObject.getUserID()).child("like").setValue(temp);
                    likeCount.setText(String.valueOf(temp));
                    notifyDataSetChanged()
                    usersDb.child(libraryObject.getUserID()).removeEventListener(this);
                    like.setClickable(false);
                    like.setEnabled(false);
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });
    }

更多信息请参见

add
addlike(libraryObject,view)
functions-code-tooI编辑了脚本@maratzangevadd
addlike(libraryObject,view)
functions-code-tooI编辑了脚本@maratzangevno,它不起作用。单击按钮后,文本视图中没有任何更改。不,它不工作。单击按钮后,文本视图中没有任何更改。