2017-10-22 6 views
0

私はpouplateViewHolderのボタンに追加したときに問題があり、間違いはありませんでしたが、私がそれを押したときに何も表示されず、それが応答しませんでした。誰も私を助けてください、私はこの部分にこだわって、それを強調しましたか?私はアンドロイドスタジオを使用しています。これはリサイクラービューの中にあります。私がbtnを押し続けると、私に何も表示されず、データベースも更新されません。populateViewHolderにsetボタンを追加するにはどうすればいいですか?

private RecyclerView mRequestsList; 

private DatabaseReference mFriendsRequestDatabase; 
private DatabaseReference mFriendsDatabaseRef; 
private DatabaseReference mFriendsReqDatabaseRef; 
private DatabaseReference mUsersDatabase; 

private FirebaseAuth mAuth; 
private String mCurrent_user_id; 

private View mMainView; 

private Button mAcceptReqBtn; 


public RequestsFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    mMainView = inflater.inflate(R.layout.fragment_requests, container, false); 

    mRequestsList = (RecyclerView) mMainView.findViewById(R.id.requests_list); 

    mAuth = FirebaseAuth.getInstance(); 
    mCurrent_user_id = mAuth.getCurrentUser().getUid(); 

    mFriendsRequestDatabase = FirebaseDatabase.getInstance().getReference().child("Friend_req").child(mCurrent_user_id);; 
    mFriendsRequestDatabase.keepSynced(true); 
    mUsersDatabase = FirebaseDatabase.getInstance().getReference().child("Users"); 
    mUsersDatabase.keepSynced(true); 

    mFriendsReqDatabaseRef = FirebaseDatabase.getInstance().getReference().child("Friend_req"); 
    mFriendsDatabaseRef = FirebaseDatabase.getInstance().getReference().child("Friends"); 

    mRequestsList.setHasFixedSize(true); 

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext()); 
    linearLayoutManager.setReverseLayout(true); 
    linearLayoutManager.setStackFromEnd(true); 

    mRequestsList.setLayoutManager(linearLayoutManager); 

    mAcceptReqBtn = (Button) mMainView.findViewById(R.id.request_accept_btn); 

    // Inflate the layout for this fragment 
    return mMainView; 
} 


@Override 
public void onStart() 
{ 
    super.onStart(); 

    FirebaseRecyclerAdapter<Requests, RequestsFragment.RequestViewHolder>RequestsRecyclerAdapter=new FirebaseRecyclerAdapter<Requests, RequestsFragment.RequestViewHolder> 
      (
        Requests.class, 
        R.layout.friend_request_single_layout, 
        RequestsFragment.RequestViewHolder.class, 
        mFriendsRequestDatabase 

      ) { 
     @Override 
     protected void populateViewHolder(final RequestsFragment.RequestViewHolder viewHolder, Requests model, int position) { 

      final String list_user_id = getRef(position).getKey(); 

      DatabaseReference get_type_ref = getRef(position).child("request_type").getRef(); 

      get_type_ref.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) 
       { 

        if(dataSnapshot.exists()){ 

         String request_type = dataSnapshot.getValue().toString(); 

         if(request_type.equals("received")) 
         { 

          mUsersDatabase.child(list_user_id).addValueEventListener(new ValueEventListener() { 
           @Override 
           public void onDataChange(DataSnapshot dataSnapshot) { 

            final String userName = dataSnapshot.child("name").getValue().toString(); 
            final String userThumb = dataSnapshot.child("thumb_image").getValue().toString(); 
            final String userStatus = dataSnapshot.child("status").getValue().toString(); 


            viewHolder.setName(userName); 
            viewHolder.setUserImage(userThumb, getContext()); 
            viewHolder.setUserStatus(userStatus); 


            mAcceptReqBtn.setOnClickListener(new View.OnClickListener(){ 

             @Override 
             public void onClick(View view){ 

              final String currentDate = DateFormat.getDateTimeInstance().format(new Date()); 

              Map friendsMap = new HashMap(); 
              friendsMap.put("Friends/" + mCurrent_user_id + "/" + list_user_id + "/date", currentDate); 
              friendsMap.put("Friends/" + list_user_id + "/" + mCurrent_user_id + "/date", currentDate); 


              friendsMap.put("Friend_req/" + mCurrent_user_id + "/" + list_user_id, null); 
              friendsMap.put("Friend_req/" + list_user_id + "/" + mCurrent_user_id, null); 


              mFriendsReqDatabaseRef.updateChildren(friendsMap, new DatabaseReference.CompletionListener() { 
               @Override 
               public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) { 


                if(databaseError == null){ 

                 Toast.makeText(getContext(),"Friends Request Accepted Successfully!", Toast.LENGTH_SHORT).show(); 

                } 

               } 
              }); 
             } 

            }); 

            /*viewHolder.mView.setOnClickListener(new View.OnClickListener() { 
             @Override 
             public void onClick(View view) 
             { 

              CharSequence options[] = new CharSequence[]{"Accept Friend Request", "Cancel Friend Request"}; 

              final AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); 

              builder.setTitle("Friend Req Options"); 
              builder.setItems(options, new DialogInterface.OnClickListener() { 
               @Override 
               public void onClick(DialogInterface dialogInterface, int i) { 

                //Click Event for each item. 
                if(i == 0){ 

                 final String currentDate = DateFormat.getDateTimeInstance().format(new Date()); 

                 Map friendsMap = new HashMap(); 
                 friendsMap.put("Friends/" + mCurrent_user_id + "/" + list_user_id + "/date", currentDate); 
                 friendsMap.put("Friends/" + list_user_id + "/" + mCurrent_user_id + "/date", currentDate); 


                 friendsMap.put("Friend_req/" + mCurrent_user_id + "/" + list_user_id, null); 
                 friendsMap.put("Friend_req/" + list_user_id + "/" + mCurrent_user_id, null); 


                 mFriendsReqDatabaseRef.updateChildren(friendsMap, new DatabaseReference.CompletionListener() { 
                  @Override 
                  public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) { 


                   if(databaseError == null){ 

                    Toast.makeText(getContext(),"Friends Request Accepted Successfully!", Toast.LENGTH_SHORT).show(); 

                   } 

                  } 
                 }); 

                } 

                if(i == 1){ 




                } 

               } 
              }); 

              builder.show(); 

             } 
            });*/ 

           } 

           @Override 
           public void onCancelled(DatabaseError databaseError) { 

           } 
          }); 


         }else if(request_type.equals("sent")) 
         { 

          //req_sent_btn = (Button) mMainView.findViewById(R.id.request_accept_btn); 
          //req_sent_btn.setText("Request Sent"); 

          //viewHolder.mView.findViewById(R.id.request_decline_btn).setVisibility(View.INVISIBLE); 

          mUsersDatabase.child(list_user_id).addValueEventListener(new ValueEventListener() { 
           @Override 
           public void onDataChange(DataSnapshot dataSnapshot) { 

            final String userName = dataSnapshot.child("name").getValue().toString(); 
            final String userThumb = dataSnapshot.child("thumb_image").getValue().toString(); 
            final String userStatus = dataSnapshot.child("status").getValue().toString(); 


            viewHolder.setName(userName); 
            viewHolder.setUserImage(userThumb, getContext()); 
            viewHolder.setUserStatus(userStatus); 
           } 

           @Override 
           public void onCancelled(DatabaseError databaseError) { 

           } 
          }); 

         } 

        } 

       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 



     } 
    }; 

    mRequestsList.setAdapter(RequestsRecyclerAdapter); 

} 




public static class RequestViewHolder extends RecyclerView.ViewHolder 
{ 

    View mView; 

    public RequestViewHolder(View itemView) 
    { 

     super(itemView); 

     mView=itemView; 

    } 

    public void setName(String name) { 

     TextView userNameView = (TextView) mView.findViewById(R.id.request_profile_name); 
     userNameView.setText(name); 

    } 

    public void setUserImage(String thumb_image, Context ctx) { 

     CircleImageView userImageView = (CircleImageView) mView.findViewById(R.id.request_profile_image); 
     Picasso.with(ctx).load(thumb_image).placeholder(R.drawable.default_avatar).into(userImageView); 

    } 

    public void setUserStatus(String userStatus) { 

     TextView user_status= (TextView) mView.findViewById(R.id.request_profile_status); 
     user_status.setText(userStatus); 

    } 
} 

これはXMLファイルです。助けてください:(

<CircleImageView 
    android:id="@+id/request_profile_image" 
    android:layout_width="100dp" 
    android:layout_height="95dp" 
    android:layout_marginBottom="10dp" 
    android:layout_marginTop="10dp" 
    android:src="@drawable/default_avatar" /> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/request_profile_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="5dp" 
     android:padding="5dp" 
     android:text="@string/display_name" 
     android:textColor="@color/colorPrimary" 
     android:textSize="15sp" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/request_profile_status" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="5dp" 
     android:padding="5dp" 
     android:text="User Default Status" 
     android:textSize="14sp" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="10dp" 
     android:layout_marginTop="5dp" 
     android:orientation="horizontal"> 

     <Button 
      android:id="@+id/request_accept_btn" 
      android:layout_width="90dp" 
      android:layout_height="40dp" 
      android:background="@android:color/holo_green_light" 
      android:text="Accept" 
      android:textColor="@android:color/background_light" 
      android:textSize="16sp" /> 

     <Button 
      android:id="@+id/request_decline_btn" 
      android:layout_width="90dp" 
      android:layout_height="40dp" 
      android:layout_marginLeft="5dp" 
      android:background="@android:color/holo_red_light" 
      android:text="Decline" 
      android:textColor="@android:color/background_light" 
      android:textSize="16sp" /> 


    </LinearLayout> 


</LinearLayout> 

+1

ボタンのかもしれません –

答えて

0

をそれはあなたのrecyclerviewでインスタンスである場合、ボタンはviewholderに初期化する必要があります。次のコードは、あなたの問題を解決することを願っています。

View mView; 
Button mAcceptReqBtn; 
public RequestViewHolder(View itemView) 
{ 

    super(itemView); 
    mView=itemView; 
    mAcceptReqBtn = (Button) itemView.findViewById(R.id.request_accept_btn); 

} 
+0

MainViewのxmlファイルを追加しました – steven

+0

ボタンがrecyclerviewにあるようですが、それは 'RequestVieで初期化する必要があります。 wHolder' – cwl

+0

ありがとうございます! java.lang.NullPointerException:NULLオブジェクト参照で仮想メソッド 'void android.widget.Button.setText(java.lang.CharSequence)'を呼び出そうとしました – steven

関連する問題