Czesc,
ma ktos moze pomysl jak wykonac powyzsze czarymary? Najpierw podam przyklad o ktorym mowie zeby bylo latwiej sobie wyobrazic problem.
Otoz mamy czesc aplikacji ktora jest odpowiedzialna za pokazanie listy uczestnikow, ktora wziela udzial w konkretnej aktywnosci np. pilka nozna.
Do tego etapu nie bylo problemu, ale chcialbym, aby uzytkownicy mieli opcje ocenienia siebie nawzajem po zakonczonej aktywnosci tzn like/dislike co zamiescilem we fragmencie. Teraz chcialbym jakos polaczyc funkcje ocen z funckja wyswietlania uzytkownik przy pomocy recyclerView. Ponizej podaje kod i obrazek.
Obrazek:
[url=http://ifotos.pl/z/qnasphn/][img]http://s6.ifotos.pl/mini/obrazekpn_qnasphn.png[/img][/url]
kod recyclerView:
public class RecyclerAdapterParticipantsOfActivity extends RecyclerView.Adapter<RecyclerAdapterParticipantsOfActivity.MyViewHolder> {
private List<Post> participantsList;
private Context context;
public RecyclerAdapterParticipantsOfActivity(List<Post> contacts,Context context){
this.participantsList =contacts;
this.context = context;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) //parent - kontener z informacjami. Layoutinflater laczy kontener(parent)
// z userslist
{ // view podstawowa klasa po ktorej dziedzicza kontrolki
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.participans_of_activity,parent,false);
return new MyViewHolder(view); //tworzy
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
final int userId;
userId= participantsList.get(position).getUser_id();
holder.whoTv.setText(participantsList.get(position).getLogin()); //laczy
String img =participantsList.get(position).getImage_url();
Picasso.with(context)
.load(img)
.into(holder.imageViewRecycler);
holder.ProfileBt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Context context;
final Intent intent;
context = v.getContext();
intent = new Intent(context, Profile.class);
intent.putExtra("idProfil",userId);
context.startActivity(intent);
}
});
holder.FriendsBt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Context context;
context = v.getContext();
Friends friends = new Friends();
friends.AddFriend(Login.currentUserId, userId,context);
}
});
holder.MessageBt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Context context;
final Intent intent;
context = v.getContext();
intent = new Intent(context, Chat.class);
intent.putExtra("IdReciver",userId);
context.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return participantsList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder{
private TextView whoTv;
private Button ProfileBt,FriendsBt,MessageBt;
private ImageView imageViewRecycler;
public MyViewHolder(View itemView) {
super(itemView);
imageViewRecycler =(ImageView) itemView.findViewById(R.id.participantsImage);
whoTv = (TextView) itemView.findViewById(R.id.LoginParticipantsTvId);
ProfileBt =(Button) itemView.findViewById(R.id.ProfilParticipantsBtId);
FriendsBt =(Button) itemView.findViewById(R.id.FriendsProfilParticipantsBtId);
MessageBt =(Button) itemView.findViewById(R.id.MessageParticipantsBtId);
}
}
}
kod fragmentu:
public class Fragment_participants extends Fragment {
private static final String TAG = "Fragment_participants";
private TextView likeTv, disLikeTv;
private ToggleButton likeToggle, dislikeToggle;
private APIService apiServiceRate;
private List<Post> rateList;
private int rateDb, rating_main;
private boolean checkLike, checkDisLike;
private String zero = Integer.toString(0);
public Fragment_participants() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_fragment_participants, container, false);
apiServiceRate= ApiUtils.getAPIService();
likeTv = (TextView) view.findViewById(R.id.likeTvFragment);
disLikeTv = (TextView) view.findViewById(R.id.disLikeTvFragment);
likeToggle = (ToggleButton) view.findViewById(R.id.togglebt);
dislikeToggle = (ToggleButton) view.findViewById(R.id.togglebt2);
likeToggle.setText(null);
likeToggle.setTextOn(null);
likeToggle.setTextOff(null);
dislikeToggle.setText(null);
dislikeToggle.setTextOn(null);
dislikeToggle.setTextOff(null);
likeToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.i("KM", "like change + " + isChecked);
if(isChecked) {
likeToggle.setBackgroundResource(R.drawable.likeclicked);
} else {
likeToggle.setBackgroundResource(R.drawable.like);
}
}
});
dislikeToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.i("KM", "dislike change + " + isChecked);
if(isChecked)
dislikeToggle.setBackgroundResource(R.drawable.dislikeclicked);
else {
dislikeToggle.setBackgroundResource(R.drawable.dislike);
}
}
});
likeToggle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("KM", "like nClickListener");
checkLike = ((ToggleButton) v).isChecked();
like(checkLike);
}
});
dislikeToggle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("KM", "dislike nClickListener");
checkDisLike = ((ToggleButton) v).isChecked();
dislike(checkDisLike);
}
});
//draw background on like/dislike
getRate(Login.currentUserId, 249);
return view;
}
public void like(boolean likeStatus){
if (likeStatus) {
addRate(Login.currentUserId, 1, 1, 249);
} else {
addRate(Login.currentUserId, 1, -1, 249);
}
}
public void dislike(boolean likeStatus){
if (likeStatus) {
addRate(Login.currentUserId, 1, -1, 249);
} else {
addRate(Login.currentUserId, 1, 1, 249);
}
}
public void addRate(int user_id, int rater_id, int rate, int activity_id) {
Call<List<Post>> call = apiServiceRate.addRateInterface(user_id, rater_id, rate, activity_id);
call.enqueue(new Callback<List<Post>>() {
@Override
public void onResponse(@NonNull Call<List<Post>> call, @NonNull Response<List<Post>> response) {
rateList=response.body();
rateDb=rateList.get(0).getRate();
rating_main=rateList.get(0).getRating_main();
String rateDbInt = Integer.toString(rateDb);
String rating_mainInt =Integer.toString(rating_main);
if(rateDb==1) {
showResponse(likeTv, rateDbInt);
showResponse(disLikeTv, zero);
}
else if(rateDb==-1) {
showResponse(disLikeTv, rateDbInt);
showResponse(likeTv,zero );
}
else {
showResponse(disLikeTv, rateDbInt);
showResponse(likeTv, rateDbInt);
}
Log.i("ratesuccess", "getting data success." + rateList);
}
@Override
public void onFailure(@NonNull Call<List<Post>> call, @NonNull Throwable t) {
Log.e("ratenotsuccess", "getting data failed." + t);
}
});
}
public void getRate(int user_id, int activity_id) {
Call<List<Post>> call = apiServiceRate.getRateInterface(user_id, activity_id);
call.enqueue(new Callback<List<Post>>() {
@Override
public void onResponse(@NonNull Call<List<Post>> call, @NonNull Response<List<Post>> response) {
rateList=response.body();
rateDb=rateList.get(0).getRate();
rating_main=rateList.get(0).getRating_main();
String rateDbInt = Integer.toString(rateDb);
String rating_mainInt =Integer.toString(rating_main);
if(rateDb==1) {
showResponse(likeTv, rateDbInt);
showResponse(disLikeTv, zero);
}
else if(rateDb==-1) {
showResponse(disLikeTv, rateDbInt);
showResponse(likeTv,zero );
}
else {
showResponse(disLikeTv, rateDbInt);
showResponse(likeTv, rateDbInt);
}
if(rateDb==1){
likeToggle.toggle();
}
else if(rateDb==-1){
dislikeToggle.toggle();
}
Log.i("ratesghfssdghuccess", "getting data success." + rateDb);
}
@Override
public void onFailure(@NonNull Call<List<Post>> call, @NonNull Throwable t) {
Log.e("ratenotsertjqaguccess", "getting data failed." + t);
}
});
}
private void showResponse(TextView textView, String response) {
if ((textView.getVisibility() == View.GONE) && response!=null && response!="") {
textView.setVisibility(View.VISIBLE);
}
textView.setText(response);
}
}
chcialbym aby system like'ow byl w formie fragmentu bo potem bede mial jeszcze sekcje posty w recyclerview i pod to tez chcialbym podpiac ten system ocen.