2016-09-21 5 views
0

그래서 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(); 
     } 
    }); 

} 

}

여기 스택에 많은 장소에 검색했지만, 아무것도 나를 위해 일하지 않는다.

+0

단순히 OnActivityResult를 사용하거나 싱글 톤을 사용하여 참조 된 활동을 호출하여 업데이트 할 것을 시도하십시오. –

+0

OnActivityResult (Fragment 클래스)를 이미 사용하고 있습니다. –

+0

onActivityResult가 콜백 되었습니까? –

답변

0

mainActivity에서 onActivityResult을 무시 했습니까? 예인 경우 해당 방법에서 super.onActivityResult으로 전화하여 조각을 호출하십시오.

startActivityForResult()과 함께 조각에 context.startActivityForResult()을 변경하십시오.

+0

문제는 어댑터 (viewHolder)에서 액티비티를 호출하고 startActivityForResult() 만 사용할 수 없다는 것입니다. –

+0

이것은 또 다른 질문입니다. http://stackoverflow.com/questions/15444375/how-to-create-interface-between-fragment-and-adapter에 대한 답변을 확인하십시오. 이것을 처리 할 수있는 많은 방법이 있습니다. – masp

관련 문제