Android 如何在单击回收器视图时更改子视图的文本?

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

我单击了它,它开始运行,并显示了正确的getText()方法,但settText方法不起作用

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,发生的事情完全不同,但你让我思考!