2017-08-24 2 views
0

Ce que je suis en train de faire est de passer une donnée d'un utilisateur spécifique dans une autre activité en utilisant son ID utilisateur comme ID unique
Il conserve envoyer les mêmes données dans la autre activité, je ne sais pas comment faireRecyclerview Onclick passage des données spécifiques lorsque cliquez sur Vignettes en activité

this is the UI of fragment_home

Ce code est est le Fragment_Home où je l'utilise pour obtenir des données de Firebase et le remplir dans le RecyclerView, et où le Onclick est en ce moment.

public class FragmentRO_Home extends Fragment { 

private Intent intent; 
private DatabaseReference database; 
RecyclerView recyclerView; 
Recycler_View_Adapter adapter; 
TextView TV_nodata; 
private String uid; 
private String nombre; 
public FragmentRO_Home() { 
    // Required empty public constructor qwe 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_fragment_ro__home,container,false); 
    database = FirebaseDatabase.getInstance().getReference(); 
    final List<Data> data = new ArrayList(); 

    TV_nodata = (TextView)view.findViewById(R.id.TV_result); 
    recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview); 
    adapter = new Recycler_View_Adapter(data, getActivity()); 
    recyclerView.setAdapter(adapter); 
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 

    fill_with_data(); 

C'est l'onclick que j'utilise avec recyclerview et c'est fonctionnel.

recyclerView.addOnItemTouchListener(new CustomRVItemTouchListener(getActivity(), recyclerView, new RecyclerViewItemClickListener() { 
     @Override 
     public void onClick(View view, int position) { 
      if (position == 0){ 
       intent = new Intent(getActivity(), ReportInformation.class); 
       intent.putExtra("idData",uid); 
       startActivity(intent); 
      }else if (position == 1){ 
       intent = new Intent(getActivity(), ReportInformation.class); 
       intent.putExtra("idData",uid); 
       startActivity(intent); 
      }else if (position == 2){ 
       intent = new Intent(getActivity(), ReportInformation.class); 
       intent.putExtra("idData",uid); 
       startActivity(intent); 
      }else if (position == 3){ 
       intent = new Intent(getActivity(), ReportInformation.class); 
       intent.putExtra("idData",uid); 
       startActivity(intent); 
      }else if (position == 5){ 
       intent = new Intent(getActivity(), ReportInformation.class); 
       intent.putExtra("idData",uid); 
       startActivity(intent); 
      } 
     } 

     @Override 
     public void onLongClick(View view, int position) { 

     } 
    })); 
    return view; 
} 

Ceci est la méthode où je peuplaient mon recyclerview d'obtenir de données dans le firebase.

public void fill_with_data() { 
    database.child("data_home").addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot d) { 

      if (d.exists()) { 
       List<Data> list = new ArrayList<>(); 
       for (DataSnapshot dataw : d.getChildren()) { 
        Data data = dataw.getValue(Data.class); 
        list.add(data); 

        uid = (data.usirayd); 
        nombre = (data.title); 
       } 
       for (Data data : list) { 
        adapter.insert(new Data(data.title, data.description, data.condition, data.time,data.usirayd)); 
       } 
      }else { 
       TV_nodata.setVisibility(View.VISIBLE); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
    recyclerView.setAdapter(adapter); 
} 
+0

quelle est votre requête et quel est le problème que vous rencontrez? – Mandy8055

+0

Quel est le problème? vous n'avez pas publié le problème auquel vous êtes confronté. –

+0

à quel problème vous êtes confronté et encore une chose Lorsque vous utilisez l'événement position onclick et si vous transmettez les mêmes données, n'utilisez pas la condition sur la position simplement envoyer des données à partir de la position. enlever si autre de la position que vous envoyez les mêmes données pour chaque position. –

Répondre

2

Essayez ce code

recyclerView.addOnItemTouchListener(new CustomRVItemTouchListener(getActivity(), recyclerView, new RecyclerViewItemClickListener() { 
     @Override 
     public void onClick(View view, int position) { 

      if(data.size()>position){ 
       if (data.get(position)!= null){ 
       intent = new Intent(getActivity(), ReportInformation.class); 
       intent.putExtra("idData",data.get(position).usirayd); 
       startActivity(intent); 
       } 
      } 
     } 

     @Override 
     public void onLongClick(View view, int position) { 

     } 
    })); 
    return view; 
} 
+0

Merci pour la solution –

1

Votre liste est du type de données donc ce que vous devez faire est de rendre la classe de données parcleable et obtenir la position objet forment cliqué et l'envoyer à l'activité. Exemple de code est quelque chose comme ça

public void onClick(View view, int position) { 
Data dataObject = list.get(position); 
       intent = new Intent(getActivity(), ReportInformation.class); 
       intent.putExtra("idData",uid); 
intent.putExtra("Data",dataObject); 
       startActivity(intent); 

     } 

Si vous voulez envoyer id unique de position cliquée alors juste obtenir Id de l'objet de la liste et l'envoyer comme celui-ci

uid= list.get(postion).getUserId; 

et l'envoyer dans l'intention

et dans une autre classe/activité recevoir cet objet parcelable comme ceci

Data dataObjectReceived = getIntent().getExtras().getParcelable("Data"); 

et si vous voulez obtenir une seule entité puis l'obtenir par sa clé

1

En cliquant sur le cardView que vous souhaitez transmettre les données dans votre activité ou fragment pour que vous avez besoin pour faire une interface par exemple dans mon cas on peut utiliser un FriendModel

Interface

public interface OnFriendListClickListener { 
    void onItemClick(FriendModel model, int position); 
} 

Activité

public class FriendListActivity extends AppCompactActivity 
     implements 
     OnFriendListClickListener { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     super.setContentView(R.layout.activity_friend); 

     //... 
     rvRemoveFriendList.setAdapter(new FriendListAdapter(context, list, this)); 

    } 

    @Override 
    public void onItemClick(FriendModel model, int position) { 
    //your code here 
    } 
} 

Adaptateur

public class FriendListAdapter extends RecyclerView.Adapter<FriendListAdapter.FriendListHolder> { 

    private List<FriendModel> friendList; 
    private Context context; 
    private OnFriendListClickListener listener; 

    public FriendListAdapter(Context context, 
          List<FriendModel> friendList, 
          OnFriendListClickListener listener,) { 
     this.context = context; 
     this.friendList = friendList; 
     this.listener = listener; 
    } 

    @Override 
    public FriendListHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     return new FriendListHolder(LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.row_friend, parent, false)); 
    } 

    @Override 
    public void onBindViewHolder(final FriendListHolder holder, int position) { 
     holder.tvFriendNumber.setText(friendList.get(position).getFriendMobile()); 

     holder.llFriendListItem.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       listener.onItemClick(friendList.get(holder.getAdapterPosition()), 
         holder.getAdapterPosition()); 
      } 
     }); 

    } 

    //......  

}