다음과 같이 데이터를 이동하려고 합니다: BusRouteMapMyAdapter.java(recyclerview adapter) -> CustomerDialog.java -> BusRouteMapActivity.java(activity)
CustomerDialog.java는 다이얼로그 역할을 하는 AppCompatactivity입니다.
StartActivityForResult는 BusRouteMapMyAdapter의 onBindViewHolder 안에 작성되어 있고, setResult는 CustomerDialog의 btn_selectstart(button) setOnClickListener에 작성되어 있으며, onActivityResult는 BusRouteMapActivity에 작성되어 있습니다.
StartActivityForResult는 제대로 작동하지만, CustomerDialog에서 BusRouteMapActivity로 데이터가 전송되지 않는 문제가 발생합니다. onActivityResult의 Result_OK가 실행되어야 하지만 Result_Cancelled가 실행됩니다.
이 문제를 해결하는 방법이 있을까요?
BusRouteMapActivity.java(activity):
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if (resultCode == Activity.RESULT_OK) {
//데이터받기
startBusRoutedId = data.getStringExtra("busRoutedId_start");
startArsId = data.getStringExtra("arsId_start");
startStationNm = data.getStringExtra("stationNm_start");
startStId = data.getStringExtra("station_start");
startStaOrd = data.getStringExtra("staOrd_start");
startDirection = data.getStringExtra("direction_start");
tv_selectstart = (TextView) findViewById(R.id.tv_selectstart);
tv_selectstart.setText(startStationNm);
}
if (resultCode == Activity.RESULT_CANCELED) {
Toast.makeText(BusRouteMapActivity.this, "불러온 데이터가 없습니다.", Toast.LENGTH_SHORT).show();
}
}
}
BusRouteMapMyAdapter.java(recyclerview adapter):
public BusRouteMapMyAdapter(ArrayList<busRouteMapItem> list, Context context){
this.mList = list;
this.mInflate = LayoutInflater.from(context);
//this.mContext = context;
}
@Override
public BusRouteMapMyAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = mInflate.inflate(R.layout.example_bus_route_map, parent, false);
MyViewHolder viewHolder = new MyViewHolder(view);
mContext = parent.getContext();
return viewHolder;
}
@SuppressLint("RecyclerView")
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.tv1.setText(mList.get(position).getStationNm());
holder.tv_routId.setText(mList.get(position).getBusRouteId());
holder.tv_seq.setText(mList.get(position).getSeq());
busRouteId = mList.get(position).getBusRouteId();
ord = mList.get(position).getSeq();
holder.tv_routId.setText(busRouteId);
holder.tv_seq.setText(ord);
holder.tv3.setText(mList.get(position).getPlainNo());
holder.btn_st.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String station_name = (String)(mList.get(position).getStationNm());
int pos = holder.getAbsoluteAdapterPosition();
if (pos != RecyclerView.NO_POSITION) {
Toast.makeText(mContext, station_name + "를 클릭하셨습니다", Toast.LENGTH_SHORT).show();
Context context = v.getContext();
Intent intent = new Intent(v.getContext(), CustomDialog.class);
intent.putExtra("busRoutedId", mList.get(pos).getBusRouteId()); //노선ID
intent.putExtra("arsId", mList.get(pos).getArsId()); //정류소ID
intent.putExtra("stationNm", mList.get(pos).getStationNm()); //정류소명
intent.putExtra("beginTm", mList.get(pos).getBeginTm()); //첫차시간
intent.putExtra("lastTm", mList.get(pos).getLastTm()); //막차시간
intent.putExtra("station", mList.get(pos).getStation()); //정류장9자리ID
intent.putExtra("staOrd", mList.get(pos).getSeq());//순번
intent.putExtra("direction", mList.get(pos).getDirection()); //목적지(방면)
((Activity)mContext).startActivityForResult(intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK),1);
}
}
});
}
CustomerDialog.java:
btn_selectstart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(CustomDialog.this, "출발지로 선택하였습니다." + busRouteId + arsId + stationNm + stId + staOrd+ direction, Toast.LENGTH_SHORT).show();
Intent intent_start = new Intent();
intent_start.putExtra("busRoutedId_start", busRouteId); //노선ID
intent_start.putExtra("arsId_start", arsId); //정류소ID
intent_start.putExtra("stationNm_start", stationNm); //정류소명
intent_start.putExtra("station_start", stId); //정류장9자리ID
intent_start.putExtra("staOrd_start", staOrd);//순번
intent_start.putExtra("direction_start", direction); //목적지(방면)
setResult(Activity.RESULT_OK, intent_start);
//팝업 닫기
finish();
}
});