답변 감사드립니다. 전부 확인해 보았는데 position 값은 문제가 없더라구요.
onBindViewHolder에서도 holder로 넘겨주는 객체도 이상이 없구요. 헌데 왜 다른 곳 데이터를 수정을 해도 처음 수정한 뷰에서 수정한 값이 적용 되는지 이해할 수가 없네요...
예를 들어 두번째 값 수정 -> 두번째 뷰에 수정한 내용 적용 완료 -> 세번째 값 수정 -> 수정한 값 두번째 뷰에 적용됨
저 마지막 과정이 문제인데 holder가 계속 잘못 넘어오는건지 순서를 바꿔서 해보아도
세번째 값 수정 -> 세번째 뷰에 수정한 내용 적용 완료 -> 두번째 값 수정 -> 수정한 값 세번째 뷰에 적용됨
이런식으로 액티비티 진입 후에 맨처음 수정한 뷰에만 계속 적용이 되네요.. 혹시 짐작 가시는게 있을까요.
아래에 adpater 코드 전부 올려봅니다. 아직 개발 초보라 정리가 잘 되어 있어도 양해 부탁드립니다ㅜㅜ
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.footballlive.data.MatchResult;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.ArrayList;
import java.util.LinkedHashMap;
public class MatchResultAdapter extends RecyclerView.Adapter<MatchResultAdapter.Viewholder> {
final private String TAG = "MatchResultAdapter";
Context context;
LinkedHashMap<String, MatchResult> mData;
ArrayList<MatchResult> results = new ArrayList<>();
TextView my_team_name_tv, opp_team_name_tv, my_team_score_tv, opp_team_score_tv, input_result_tv, match_result_hide_tv;
LinearLayout score_ll;
public MatchResultAdapter(Context context, LinkedHashMap<String, MatchResult> mData) {
this.context = context;
this.mData = mData;
for(MatchResult r : mData.values()){
results.add(r);
}
}
@NonNull
@Override
public Viewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View itemView = layoutInflater.inflate(R.layout.match_result_item, parent, false);
return new Viewholder(itemView);
}
@Override
public void onBindViewHolder(@NonNull Viewholder holder, int position) {
MatchResult m = results.get(position);
holder.setItem(m);
Log.e(TAG, "onBindViewHolder - myTeamScore : " + m.getMyTeam_score() + " / oppTeamScore : " + m.getOppTeam_score());
}
@Override
public int getItemCount() {
return results.size();
}
public class Viewholder extends RecyclerView.ViewHolder{
public Viewholder(@NonNull View itemView) {
super(itemView);
my_team_name_tv = itemView.findViewById(R.id.my_team_name_tv);
opp_team_name_tv = itemView.findViewById(R.id.opp_team_name_tv);
my_team_score_tv = itemView.findViewById(R.id.my_team_score_tv);
opp_team_score_tv = itemView.findViewById(R.id.opp_team_score_tv);
input_result_tv = itemView.findViewById(R.id.input_result_tv);
score_ll = itemView.findViewById(R.id.score_ll);
match_result_hide_tv = itemView.findViewById(R.id.match_result_hide_tv);
input_result_tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/* Dialog 설정 */
int position = getAdapterPosition();
Log.e(TAG, "position : " + position);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
View view = LayoutInflater.from(context).inflate(R.layout.match_result_dialog,null, false);
builder.setView(view);
final EditText myTeam_score_et = view.findViewById(R.id.myTeam_score_et);
final EditText oppTeam_score_et = view.findViewById(R.id.oppTeam_score_et);
Button match_result_input_btn = view.findViewById(R.id.matchresult_input_btn);
Button match_result_cancel_btn = view.findViewById(R.id.matchresult_cancel_btn);
TextView myTeam_name_tv = view.findViewById(R.id.myTeam_name_tv);
TextView oppTeam_name_tv = view.findViewById(R.id.oppTeam_name_tv);
final MatchResult matchResult = results.get(position);
myTeam_name_tv.setText(matchResult.getMyTeam());
oppTeam_name_tv.setText(matchResult.getOppTeam());
final AlertDialog dlg = builder.create();
/* Dialog 확인 버튼 클릭리스너 구현 */
match_result_input_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String my_team_score = myTeam_score_et.getText().toString();
String opp_team_score = oppTeam_score_et.getText().toString();
matchResult.setMyTeam_score(my_team_score);
matchResult.setOppTeam_score(opp_team_score);
results.set(getAdapterPosition(), matchResult);
for(MatchResult m : results){
Log.e(TAG, "my_team_score" + m.getMyTeam_score() + "opp_team_score" + m.getOppTeam_score());
}
notifyItemChanged(getAdapterPosition());
dlg.dismiss();
}
});
dlg.show();
}
});
}
public void setItem(MatchResult m) {
/* holder에 있는 뷰에 데이터 보여주기 */
my_team_name_tv.setText(m.getMyTeam());
opp_team_name_tv.setText(m.getOppTeam());
Log.e(TAG, "setItem - myTeamScore : " + m.getMyTeam_score() + " / oppTeamScore : " + m.getOppTeam_score());
if(m.getMyTeam_score() != null && m.getOppTeam_score() != null){
my_team_score_tv.setText(m.getMyTeam_score());
opp_team_score_tv.setText(m.getOppTeam_score());
input_result_tv.setVisibility(View.INVISIBLE);
score_ll.setVisibility(View.VISIBLE);
match_result_hide_tv.setVisibility(View.INVISIBLE);
}else{
input_result_tv.setVisibility(View.VISIBLE);
score_ll.setVisibility(View.INVISIBLE);
match_result_hide_tv.setVisibility(View.VISIBLE);
}
}
}
}