Почему мой RecyclerView.Adapter в onBindViewHolder не может видеть переменную из ViewHolder? - PullRequest
0 голосов
/ 25 марта 2020

В моем коде держатель не может разрешить emailText, nicknameText и permissionsText. image Почему я не могу его использовать и как его починить.

public class MemberAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private Context mContext;
    private Cursor mCursor;

    public MemberAdapter(Context context, Cursor cursor){
        mContext = context;
        mCursor = cursor;
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder( ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        View view = inflater.inflate(R.layout.member_item,parent,false);
        return new MemberViewHolder(view);
    }

    @Override
    public void onBindViewHolder( @NonNull RecyclerView.ViewHolder holder, int position) {
        if(!mCursor.move(position)){
            return;
        }
        String email = mCursor.getString(mCursor.getColumnIndex(RegisterContract.MemberEntry.COLUMN_EMAIL));
        String nickname = mCursor.getString(mCursor.getColumnIndex(RegisterContract.MemberEntry.COLUMN_NICKNAME));
        String permissions = mCursor.getString(mCursor.getColumnIndex(RegisterContract.MemberEntry.COLUMN_PERMISSIONS));

        holder.emailText.setText(email);
        holder.nicknameText.setText(nickname);
        holder.permissionsText.setText(permissions);


    }


    public class MemberViewHolder extends RecyclerView.ViewHolder{
        public TextView emailText;
        public TextView nicknameText;
        public TextView permissionsText;

        public MemberViewHolder( View itemView) {
            super(itemView);

            emailText = itemView.findViewById(R.id.emailTVRV);
            nicknameText = itemView.findViewById(R.id.nicknameTVRV);
            permissionsText = itemView.findViewById(R.id.permTVRV);
        }
    }


}

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Я не вижу, какой класс вы расширяете в MemberAdapter class. Но, догадываясь, я думаю, что вы расширяете:

public class MemberViewHolder extends RecyclerView.Adapter<ViewHolder>

, где этот ViewHolder класс является встроенным классом, вы должны назначить свой ViewHolder, который называется MemberViewHolder, Это будет выглядеть следующим образом:

public class MemberViewHolder extends RecyclerView.Adapter<MemberAdapter. MemberViewHolder>

После добавления вам будет предложено реализовать удобные функции, после чего вы сможете получить доступ к TextViews через держатель, основанный на onBindViewHolder () функция.

Если вы обнаружите какую-либо проблему, пожалуйста, ответьте.

Удачного кодирования ?

0 голосов
/ 25 марта 2020

, потому что вам нужно привести владельца к вашему классу типа держателя, попробуйте это:

((MemberViewHolder)holder).emailText.setText(email);
((MemberViewHolder)holder).nicknameText.setText(nickname);
((MemberViewHolder)holder).permissionsText.setText(permissions);

лучший способ - расширить с указанием c типа держателя

MemberAdapter extends RecyclerView.Adapter<MemberViewHolder>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...