Android 如何在viewpager中实现类似按钮的概念?
我有一个显示图像的viewpager,在它下面,我添加了一个like按钮。我可以处理Android 如何在viewpager中实现类似按钮的概念?,android,android-viewpager,Android,Android Viewpager,我有一个显示图像的viewpager,在它下面,我添加了一个like按钮。我可以处理setOnClickListener并获取视图的位置,并增加类似的值 问题是,在喜欢某个项目后,当我到达viewPager的最后一个项目时,即我按下“喜欢”按钮的项目,其值会回到原来的项目。当我刷新片段时,该项正在更新为其新的类似值 如何在viewPager的适配器中处理视图的动态刷新 这就是我尝试过的 PageAdapter.java @Override public int getItemPo
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编辑了脚本@maratzangevaddaddlike(libraryObject,view)
functions-code-tooI编辑了脚本@maratzangevno,它不起作用。单击按钮后,文本视图中没有任何更改。不,它不工作。单击按钮后,文本视图中没有任何更改。