그래서 cardAdapter를 사용하는 조각이 있습니다. 카드를 클릭하면, 활동 인 Carona (ride)라고 불리는 물건의 세부 사항을 보여줍니다. 이 세부 작업에서 제안을 취소 할 수있는 옵션이 있습니다. 그렇게 할 경우 이전 조각으로 돌아가지만 카드 (내 리사이클 러보기)는 업데이트되지 않습니다.작업 완료 후 알림/업데이트 조각 - Android
그래서 지금까지 해봤습니다.
모든 카드가 포함 된 내 "첫 번째"조각입니다. 나는 toast를 거기에 넣으려고 시도했기 때문에 onActivityResult 메서드가 결코 호출되지 않았다고 생각한다.
public class ProposalsFragment extends Fragment {
private CaroneirosController cc;
private RecyclerView myRecView;
private CardProposalAdapter adapter;
private int MYACTIVITY_REQUEST_CODE = 101;
public ProposalsFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View myView;
myView = inflater.inflate(R.layout.proposals_layout, container, false);
cc = CaroneirosController.getInstance();
myRecView = (RecyclerView) myView.findViewById(R.id.propostasRecycler);
myRecView.setHasFixedSize(true);
LinearLayoutManager layoutManager = new LinearLayoutManager(this.getContext());
myRecView.setLayoutManager(layoutManager);
myRecView.setItemAnimator(new DefaultItemAnimator());
showData();
return myView;
}
private void showData() {
List<Carona> c = cc.caronasOfferedBy(cc.getSessionUser());
if(c.size() == 0){
Toast.makeText(getContext(), "Você não tem caronas ofertadas.", Toast.LENGTH_LONG);
} else {
adapter = new CardProposalAdapter(c);
myRecView.setAdapter(adapter);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if ((requestCode == 10001) && (resultCode == Activity.RESULT_OK)){
Toast.makeText(getContext(), "Voltou", Toast.LENGTH_SHORT);
adapter.notifyDataSetChanged();
getFragmentManager().beginTransaction().detach(this).attach(new ProposalsFragment()).commit();
}
}
}
어댑터
public class CardProposalAdapter extends RecyclerView.Adapter<CardProposalAdapter.ViewHolder> {
List<Carona> caronas;
Context mContext;
public CardProposalAdapter(List<Carona> caronas){
this.caronas = caronas;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.cards_proposal, parent, false);
mContext = parent.getContext();
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Carona c = caronas.get(position);
holder.tempCarona = c;
holder.localSaida.setText(c.getLocalSaida());
holder.localDestino.setText(c.getDestino());
holder.dataSaida.setText(c.getDataSaida().toString());
holder.horaSaida.setText(c.getHoraSaida().toString());
holder.vagas.setText(Integer.toString(c.getVagas()));
holder.ajudaDeCusto.setText(Double.toString(c.getAjudaDeCusto()));
}
@Override
public int getItemCount() {
return caronas.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
public View view;
private CaroneirosController cc;
public Carona tempCarona;
public TextView localSaida;
public TextView localDestino;
public TextView dataSaida;
public TextView horaSaida;
public TextView vagas;
public TextView ajudaDeCusto;
public ViewHolder(final View myView) {
super(myView);
cc = CaroneirosController.getInstance();
localSaida = (TextView) myView.findViewById(R.id.local_saida_card);
localDestino = (TextView) myView.findViewById(R.id.local_destino_card);
dataSaida = (TextView) myView.findViewById(R.id.data_saida_card);
horaSaida = (TextView) myView.findViewById(R.id.horario_card);
vagas = (TextView) myView.findViewById(R.id.vagas_card);
ajudaDeCusto = (TextView) myView.findViewById(R.id.custo_card);
Button cancelarPropBtn = (Button) myView.findViewById(R.id.cancelarPropostaBtn);
cancelarPropBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cc.cancelProposal(tempCarona);
caronas.remove(tempCarona);
notifyDataSetChanged();
}
});
myView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), ProposalDetailsActivity.class);
intent.putExtra("propostaID", tempCarona.getId());
((Activity) mContext).startActivityForResult(intent, 10001);
}
});
}
}
}
그리고 데이터 집합을 변경하는 활동.
public class ProposalDetailsActivity extends AppCompatActivity {
CaroneirosController cc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
cc = CaroneirosController.getInstance();
setContentView(R.layout.activity_proposal_details);
Intent intent = getIntent();
final Carona propostaCarona = cc.getCaronaByID(intent.getLongExtra("propostaID", 000));
TextView saida = (TextView) findViewById(R.id.propostaSaida);
TextView destino = (TextView) findViewById(R.id.propostaDestino);
TextView data = (TextView) findViewById(R.id.propostaData);
TextView hora = (TextView) findViewById(R.id.propostaHora);
TextView vaga = (TextView) findViewById(R.id.propostaVaga);
TextView custo = (TextView) findViewById(R.id.propostaCusto);
saida.setText(propostaCarona.getLocalSaida());
destino.setText(propostaCarona.getDestino());
data.setText(propostaCarona.getDataSaida().toString());
hora.setText(propostaCarona.getHoraSaida());
vaga.setText(Integer.toString(propostaCarona.getVagas()));
custo.setText(Double.toString(propostaCarona.getAjudaDeCusto()));
final CardProposalAdapter ad = new CardProposalAdapter(cc.caronasOfferedBy(cc.getSessionUser()));
Button cancelarPropBtn = (Button) findViewById(R.id.cancelarPropostaBtn);
cancelarPropBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cc.cancelProposal(propostaCarona);
setResult(RESULT_OK);
setResult(Activity.RESULT_OK);
finish();
}
});
}
}
여기 스택에 많은 장소에 검색했지만, 아무것도 나를 위해 일하지 않는다.
단순히 OnActivityResult를 사용하거나 싱글 톤을 사용하여 참조 된 활동을 호출하여 업데이트 할 것을 시도하십시오. –
OnActivityResult (Fragment 클래스)를 이미 사용하고 있습니다. –
onActivityResult가 콜백 되었습니까? –