Передайте переменную адаптеру из класса - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь передать строковую переменную из класса фрагмента в ее адаптер. Код, написанный в классе фрагмента:

public class RequestPendingFragment extends Fragment {

FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference mRootRef = FirebaseDatabase.getInstance().getReference();
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
static ArrayList<Friend> req_friends;
static String team ;

public RequestPendingFragment() {
}
     @Override
     public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        final String UID = firebaseUser.getUid();

        Bundle bundle = this.getArguments();
        team = bundle.getString("Team_name");
        mRecyclerView = (RecyclerView) getView().findViewById(R.id.requestPendingFriend);
        mRecyclerView.setHasFixedSize(true);
        mLayoutManager = new LinearLayoutManager(getActivity());
        mRecyclerView.setLayoutManager(mLayoutManager);

        mRootRef.child("users").child(UID).child("Teams").equalTo("team").addValueEventListener(new 
        ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            DataSnapshot snapshot = dataSnapshot ;
            if(snapshot != null){
                if(snapshot.hasChild("requests")){
                    DataSnapshot requests = dataSnapshot.child("requests");
                    ArrayList<Friend> requestFriend = new ArrayList<>();
                    for(DataSnapshot snapshot1: requests.getChildren()){
                        Friend friend = new Friend();
                        friend.setId(snapshot1.child("id").getValue(String.class));
                        friend.setFriendName(snapshot1.child("friendName").getValue(String.class));
                        friend.setStatus(snapshot1.child("status").getValue(String.class));
                        requestFriend.add(friend);
                    }

                    req_friends = requestFriend;
                    if(req_friends!=null && !req_friends.isEmpty()){
                        mAdapter = new RequestPendingAdapter(getActivity(), req_friends);
                        mRecyclerView.setAdapter(mAdapter);
                    }
                }

И соответствующий код адаптера:

 public class RequestPendingAdapter extends 
  RecyclerView.Adapter<RequestPendingAdapter.RecyclerViewHolder>{

 private ArrayList<Friend> mData;
 private Context mContext;




public RequestPendingAdapter(Context mContext, ArrayList<Friend> mData) {
    this.mData = mData;
    this.mContext = mContext;


}

Теперь список массивов req_friends отправляется. Точно так же мне нужно передать строковую переменную 'team' из класса фрагмента в адаптер. Я попытался внести следующие изменения в код адаптера, но он не работает. Пожалуйста, объясните, как это сделать правильно.

public class RequestPendingAdapter extends 
                  RecyclerView.Adapter<RequestPendingAdapter.RecyclerViewHolder>{

     private ArrayList<Friend> mData;
     private Context mContext;
     private String mteam ;



    public RequestPendingAdapter(Context mContext, ArrayList<Friend> mData, String mteam) {
        this.mData = mData;
        this.mContext = mContext;
        this.mteam= mteam;


   }

Аналогично в классе фрагментов я сделал это изменение:

               if(req_friends!=null && !req_friends.isEmpty()){
                        mAdapter = new RequestPendingAdapter(getActivity(), req_friends);
                        mAdapter = new RequestPendingAdapter(getActivity(), team);
                        mRecyclerView.setAdapter(mAdapter);

Также появляется сообщение об ошибке всплывающего окна.

enter image description here

1 Ответ

1 голос
/ 20 марта 2020

Вам необходимо внести следующие изменения в свой код.

if(req_friends!=null && !req_friends.isEmpty())
 {
     mAdapter = new RequestPendingAdapter(getActivity(),req_friends,team);
     mRecyclerView.setAdapter(mAdapter);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...