Android 如何在单击回收器视图时更改子视图的文本?
我单击了它,它开始运行,并显示了正确的getText()方法,但settText方法不起作用Android 如何在单击回收器视图时更改子视图的文本?,android,android-recyclerview,Android,Android Recyclerview,我单击了它,它开始运行,并显示了正确的getText()方法,但settText方法不起作用 userAdapter.setOnEntryClickListener(new UserAdapter.OnEntryClickListener() { @Override public void onEntryClick(View view, int position) { DatabaseUser user = dbUs
userAdapter.setOnEntryClickListener(new UserAdapter.OnEntryClickListener() {
@Override
public void onEntryClick(View view, int position) {
DatabaseUser user = dbUsersList.get(position);
TextView clickedView = (TextView) view.findViewById(R.id.userAdapterFollowBtn);
if(view == clickedView) {
if (clickedView.getText().equals("following")) {
Log.d(Constants.DEBUG, " THE CLICK VIEW IS " + clickedView.getText());
//APPLY Following
String txtFollow = "follow";
clickedView.setText(txtFollow);
if (user.getIsChanged() == 0) {
user.setIsChanged(1);
} else {
user.setIsChanged(0);
}
user.setIsType(3);
db.updateFollow(user);
userAdapter.notifyDataSetChanged();
} else {
clickedView.setText("following");
if (user.getIsChanged() == 0) {
user.setIsChanged(1);
} else {
user.setIsChanged(0);
}
user.setIsType(0);
db.updateFollow(user);
userAdapter.notifyDataSetChanged();
}
} else {
Toast.makeText(getApplicationContext(), user.getUsername() + " is selected!", Toast.LENGTH_SHORT).show();
takeToUserProfile(dbUsersList.get(position));
}
}
});
以下是适配器类:
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.MyViewHolder> {
private List<DatabaseUser> dbUsersList, followingList;
private DatabaseHelper db;
private Context context;
private Typeface typeFace, italicTypeface, boldTypeface;
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public TextView userAdapterUsername, userAdapterFollowBtn;
public ImageView userAdapterUserPicture;
public MyViewHolder(View view) {
super(view);
userAdapterUsername = (TextView) view.findViewById(R.id.userAdapterUsername);
userAdapterFollowBtn = (TextView) view.findViewById(R.id.userAdapterFollowBtn);
userAdapterUserPicture = (ImageView) view.findViewById(R.id.userAdapterUserPicture);
Log.d(Constants.DEBUG, "IN MY VIEW HOLDER");
view.setOnClickListener(this);
userAdapterFollowBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (mOnEntryClickListener != null) {
Log.d(Constants.DEBUG, "IN On click");
mOnEntryClickListener.onEntryClick(v, getAdapterPosition());
}
}
}
private static OnEntryClickListener mOnEntryClickListener;
public interface OnEntryClickListener {
void onEntryClick(View view, int position);
}
public void setOnEntryClickListener(OnEntryClickListener onEntryClickListener) {
mOnEntryClickListener = onEntryClickListener;
}
public UserAdapter(Context mContext, List<DatabaseUser> usersList, List<DatabaseUser> passedFollowing, Typeface myTypeface, Typeface myTypefaceItalic, Typeface myTypefaceBold) {
context = mContext;
dbUsersList = usersList;
followingList = passedFollowing;
typeFace = myTypeface;
italicTypeface = myTypefaceItalic;
boldTypeface = myTypefaceBold;
Log.d(Constants.DEBUG, "IN MY User ADAPTER CONSTRUCTOR");
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.follow_item, parent, false);
Log.d(Constants.DEBUG, "RETURN ITEM VIEW HOLDER");
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
DatabaseUser user = dbUsersList.get(position);
holder.userAdapterUsername.setTypeface(boldTypeface);
holder.userAdapterUsername.setText(user.getUsername());
final int pos = getItemViewType(position);
//TODO Create pic link
if(containsId(dbUsersList.get(pos), followingList)) {
//Then show following
holder.userAdapterFollowBtn.setText("following");
} else {
//show follow
holder.userAdapterFollowBtn.setText("follow");
}
String userspic = dbUsersList.get(pos).getPicture();
if(userspic == null) {
//SET DEFAULT OR PUT DEFAULT IN XML AND DO NOTHING IT SHOULD SHOW DEFAULT PIC
} else {
//TODO setupUser Pic
String img1 = "http://www.hindustantimes.com/Images/popup/2015/6/kungfu2.jpg";
Picasso.with(context).load(img1).transform(new RoundedTransformation()).into(holder.userAdapterUserPicture);
}
}
@Override
public int getItemCount() {
return dbUsersList.size();
}
public static boolean containsId(DatabaseUser currentUser, List<DatabaseUser> list) {
for (DatabaseUser object : list) {
if (currentUser.getUserId().equals(object.getUserId())) {
return true;
}
}
return false;
}
@Override
public int getItemViewType(int position) {
return position;
}
}
公共类UserAdapter扩展了RecyclerView.Adapter{
私有列表dbUsersList,以下列表;
专用数据库;
私人语境;
专用字体、斜体、黑体;
公共类MyViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
公共文本视图userAdapterUsername,userAdapterFollowBtn;
公共图像查看用户AdapterUserPicture;
公共MyViewHolder(视图){
超级(视图);
userAdapterUsername=(TextView)view.findViewById(R.id.userAdapterUsername);
userAdapterFollowBtn=(TextView)view.findViewById(R.id.userAdapterFollowBtn);
userAdapterUserPicture=(ImageView)view.findViewById(R.id.userAdapterUserPicture);
Log.d(Constants.DEBUG,“在我的视图中”);
view.setOnClickListener(这个);
userAdapterFollowBtn.setOnClickListener(此);
}
@凌驾
公共void onClick(视图v){
if(mOnEntryClickListener!=null){
Log.d(Constants.DEBUG,“在单击时输入”);
onentryclicklistener.onEntryClick(v,getAdapterPosition());
}
}
}
私有静态OnEntryClickListener mOnEntryClickListener;
公共接口OnEntryClickListener{
void onEntryClick(视图,int位置);
}
公共无效设置OnEntryClickListener(OnEntryClickListener OnEntryClickListener){
mOnEntryClickListener=onEntryClickListener;
}
公共用户适配器(上下文mContext、列表usersList、列表passedFollowing、字体myTypeface、字体myTypefaceItalic、字体myTypefaceBold){
上下文=mContext;
dbUsersList=usersList;
followList=passedFollowing;
字体=我的字体;
italicTypeface=MyTypeface Italic;
粗体字=我的粗体字;
Log.d(Constants.DEBUG,“在我的用户适配器构造函数中”);
}
@凌驾
公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())
.充气(右布局,跟随项,父项,假);
Log.d(Constants.DEBUG,“返回项视图持有者”);
返回新的MyViewHolder(itemView);
}
@凌驾
公共无效onBindViewHolder(最终MyViewHolder,内部位置){
DatabaseUser=dbUsersList.get(位置);
holder.userAdapterUsername.setTypeface(粗体);
holder.userAdapterUsername.setText(user.getUsername());
最终int pos=getItemViewType(位置);
//TODO创建pic链接
if(containsId(dbUsersList.get(pos),以下列表)){
//然后显示以下内容
holder.userAdapterFollowBtn.setText(“以下”);
}否则{
//显示跟随
holder.userAdapterFollowBtn.setText(“跟随”);
}
字符串userspic=dbUsersList.get(pos.getPicture();
if(userspic==null){
//设置默认值或将默认值放在XML中,不做任何事情,它应该显示默认值
}否则{
//TODO设置用户Pic
字符串img1=”http://www.hindustantimes.com/Images/popup/2015/6/kungfu2.jpg";
毕加索.with(context).load(img1).transform(newroundedTransformation())。转换为(holder.userAdapterUserPicture);
}
}
@凌驾
public int getItemCount(){
返回dbUsersList.size();
}
公共静态布尔containsId(数据库用户currentUser,列表){
用于(数据库用户对象:列表){
if(currentUser.getUserId().equals(object.getUserId())){
返回true;
}
}
返回false;
}
@凌驾
public int getItemViewType(int位置){
返回位置;
}
}
您的
dbUsersList
未更新。通知数据集更改后,请在dbUsersList
中检查您的用户对象。最终出现的问题是我已通过了以下列表,因此我从未在更新时重新调用以从数据库获取新的以下内容。更新发生了,我只需要从数据库中重新抓取下面的列表,以便有一个更新的列表进行检查,就像在一个新方法中一样,该方法将列表传递回contains方法
db.grabFollowersList();
我不知道我是否明白你的意思?dbUsersList更新正确,唯一的问题是setText方法没有被调用,我不明白为什么或者我在试图设置视图的文本时出错了,如果我想刷新子按钮viewDebug it and checkGood call,发生的事情完全不同,但你让我思考!