[RESOLVIDO]Chamar onActivityResult dentro de um Fragment

Pessoal, boa tarde.

Estou tentando fazer a chamada do onActivityResult() dentro de um Fragment e não estou conseguindo.

Eu tenho a seguinte estrutura:

FragmentActivity que chama um Fragment e neste Fragment eu tenho um botão que chama uma ListActivity, esta list por sinal retorna um objeto para o Fragment para exibi-lo em tela.

O código está dessa maneira:

Função do Fragment que chama a ListActivity:

[code] private OnClickListener onConsultarTabelaPreco = new OnClickListener() {

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		try {
			
			Intent troca = new Intent(getActivity(), ListaTabelaPreco.class);
			startActivityForResult(troca, 1);
			
		} catch (Exception e) {
			// TODO: handle exception
			Toast.makeText(getActivity().getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show();
		}
	}
};[/code]

ItemClick da ListActivity chamada:

[code] @Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);

	Intent troca = new Intent(ListaTabelaPreco.this, CadastroClienteDados.class);
	TabelaPreco tabelaPreco = (TabelaPreco) this.getListAdapter().getItem(position);
	troca.putExtra("codigoTabelaPreco", tabelaPreco.getCodigo());
	setResult(RESULT_OK, troca);
	ListaTabelaPreco.this.finish();
}[/code]

E ai estou tentando chamar o onActivityResult no Fragment, mas ele parece que não possui este método.

Alguém saberia como controlar o resultado de uma ListActivity desta forma que está estruturado?

Obrigado desde já.

Voce vai ter que dar um getActivity().setResult

Olá
Você tem que implementar o método onActivityResult no fragment que chamou a activity. Você não chama o método, ele é chamado após o termino da activity.

Obrigado pela atenção
Desculpa pessoal, mas eu já havia tentado exatamente o que sugeriram.

Vamos lá:

Marky:
Você fala de no meu ListActivity dentro do ItemClick utilizar getActivity().setResult para devolver o código que preciso para o Fragment?
Porque na função ItemClick que eu copiei aqui, ela fica dentro do ListActivity e nem é disponível o getActivity() para utilizar o setResult…

A H Gusukuma:
Então eu implementei já o onActivityResult no Fragment, é eu me expressei errado. Não tenho que chamá-lo ele é chamado automático, entendo isso.
Mas o problema é que eu implemento ele e quando eu dou finish() na minha ListActivity e volto para o Fragment ele não passa no método onActivityResult como é de costume…

Quando eu implemento o onActivityResult no meu Fragment ele fica da seguinte maneira:

[code] public void onActivityResult(int requestCode, int resultCode, Intent data) {

	getActivity();
	if(requestCode==1){
    	
    	getActivity();
		if (resultCode==Activity.RESULT_OK){

			tabelaPreco = new TabelaPreco(data.getIntExtra("codigoTabelaPreco", 0));
			cliente.setTabelaPreco(tabelaPreco);
			edtTabelaPreco.setText(cliente.getTabelaPreco().getCodigo().toString() + " - " + cliente.getTabelaPreco().getDescricao().toString());
    		
    	} else {
			getActivity();
			if(resultCode == Activity.RESULT_CANCELED){
				
				Toast.makeText(getActivity().getBaseContext(), "Pesquisa Tabela Preço Cancelada!", Toast.LENGTH_LONG).show();
			}
		}
	 }
};[/code]

Só que ele nem passa por este método.
Comparando com outros onActivityResult que já implementei, dentro de Activities é claro.

Eu até implemento o onActivityResult, mas ele não passa nele quando finalizo a ListActivity. Acredito que é por ser um Fragment.

Obrigado.

Obrigado pela atenção de todos.

Consegui resolver.

Ficou assim:

CadastroCliente (FragmentActivity) com ActionBar e Tabs.

Em cada Tab eu carrego 1 Fragment (CadastroClienteDados, CadastroClienteEntrega, CadastroClienteCobranca).

E no Fragment (CadastroClienteDados) eu tenho um botão que chama uma ListActivity (ListaTabelaPreco)

Essa lista me mostra vários itens, quando eu seleciono um. Eu preciso devolver o código selecionado para construir meu objeto TabelaPreco.

Então eu fiz da seguinte maneira, continuo chamando a ListActivity no meu Fragment:

[code] private OnClickListener onConsultarTabelaPreco = new OnClickListener() {

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		try {
			
			Intent troca = new Intent(getActivity(), ListaTabelaPreco.class);
			getActivity().startActivityForResult(troca, 3);
			
		} catch (Exception e) {
			// TODO: handle exception
			Toast.makeText(getActivity().getBaseContext(), e.getMessage(), Toast.LENGTH_LONG).show();
		}
	}
};

[/code]
E devolvo o Item selecionado na minha ListActivity:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
	// TODO Auto-generated method stub
	super.onListItemClick(l, v, position, id);
	
	Intent troca = new Intent(ListaTabelaPreco.this, CadastroClienteDados.class);
	TabelaPreco tabelaPreco = (TabelaPreco) this.getListAdapter().getItem(position);
	troca.putExtra("codigoTabelaPreco", tabelaPreco.getCodigo());
	setResult(RESULT_OK, troca);
	ListaTabelaPreco.this.finish();
}

Só que acho que era marcação minha mesmo, porque desde o começo eu controlo as ações dos Fragments de modo hierárquico então o meu FragmentActivity cuida das ações e validações dos Fragments que ficam dentro de seus Tabs.
Então a única coisa que eu fiz, foi na chamada da ListActivity trocar:

E então receber o retorno no onActivityResult da FragmentActivity:

[code] if(resultCode==RESULT_OK){

			fragDados = (CadastroClienteDados) fm.findFragmentByTag("dados");
			fragDados.tabelaPreco = new TabelaPreco(data.getIntExtra("codigoTabelaPreco", 0));
			fragDados.cliente.setTabelaPreco(fragDados.tabelaPreco);
		
		}else if(resultCode==RESULT_CANCELED) {
			
			Toast.makeText(getBaseContext(), "Pesquisa Tabela Preço Cancelada!", Toast.LENGTH_LONG).show();
		}

[/code]
Agora está funcionando corretamente.

Obrigado mesmo assim pela atenção de todos.

Por algum motivo, dando um startActivity de dentro do Fragment, ele retornava o result com us requestCodes bizarros.

Sim isso mesmo.
Eu testei aqui o requestCode estava com o valor 65138 ou algo do tipo.

Ai passando o getActivity() na chamada, funcionou.

Obrigado.