android.de suporte.v4.app.FragmentManager OU android.app.FragmentManager?
-
21-12-2019 - |
Pergunta
Eu estou aprendendo desenvolvimento Android.Eu ficar preso em algo que deve ser muito fácil.
Im a criação de um Aplicativo com uma Atividade, 2 fragmentos e 1 interface.
android:minSdkVersion="11"
android:targetSdkVersion="19
Assim, na atividade principal de Mi, tentando criar uma referência para o Fragmento B utilizando o gestor.Fiquei preso aqui, porque Eclispse está me dizendo para mudar algumas coisas (veja abaixo):
A minha intenção:`
@Override
public void respond(int i) {
// TODO Auto-generated method stub
FragmentManager manager =getFragmentManager();
FragmentB f2= (FragmentB) manager.findFragmentById(R.id.fragment2);
}`
Se eu faço isso whay eu recebo as mensagens de erro e a necessidade de realizar algumas alterações.Após as alterações o código se parece com isso (e eu ainda não consigo alcançar FragmentB):
@Override
public void respond(int i) {
// TODO Auto-generated method stub
android.app.FragmentManager manager =getFragmentManager();
android.app.Fragment f2= manager.findFragmentById(R.id.fragment2);
}
Para os detalhes adicionais que eu vou colocar aqui também a importação de cabeçalho da Atividade:
package com.example.modular_ui;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
public class MainActivity extends Activity implements Communicator{....
O que estou ausente aqui?todo o apoio.v4 /support.v7 coisa é um pouco confuso para os novatos.
EDITAR:Depois de alterar para:
import android.app.Fragment;
import android.app.FragmentManager;
E estendendo FragmentActivity eu ainda não é possível criar uma referência para FragmentB:
@Override
public void respond(int i) {
// TODO Auto-generated method stub
FragmentManager man = getFragmentManager();
FragmentB b = man.findFragmentById(R.id.fragment2);
}
Como Solicitada que eu já postei o FragmentB código:
package com.example.modular_ui;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class FragmentB extends Fragment {
TextView text;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment_b, container);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
text = (TextView) getActivity().findViewById(R.id.textView1);
}
XML principal
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.modular_ui.MainActivity"
tools:ignore="MergeRootFrame" >
<fragment
android:id="@+id/fragment1"
android:name="com.example.modular_ui.FragmentA"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<fragment
android:id="@+id/fragment2"
android:name="com.example.modular_ui.FragmentB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/fragment1"
android:layout_marginTop="54dp" />
</RelativeLayout>
Solução
Primeiro de tudo:sua atividade deve se estender FragmentActivity.
Sobre as bibliotecas de suporte.Eles foram introduzidos para adicionar algumas funcionalidades a mais antiga Andróides.Por exemplo, os Fragmentos foram introduzidas no Android 3.0 SDK (nr:11).Na verdade (de acordo com a documentação) nos Androids 3.0 < suporte libary usa a implementação do sistema de Fragmentos.
Outras dicas
Basta usar getSupportFragmentManager();, depois de adicionado o suporte a biblioteca com êxito.
OP estava tão perto de ter uma solução que teria funcionado bem para a API de 11 e mais recente sem precisar de apoio.v4.
Ele só precisava de mudar a sua Fragmento de a também não usar o suporte.v4, em sua importação instrução.
Resumo das duas abordagens. TODAS as suas Atividades e Fragmentos deve ter o código que parece exatamente um destes;não misture!(Nem todas as linhas são necessários em todos os arquivos;use linhas se necessário.)
suporte-v4 abordagem
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.Fragment; <-- ".support.v4"
import android.support.v4.app.FragmentManager;
... MainActivity extends FragmentActivity ...
... = getSupportFragmentManager();
.... YourFragment extends Fragment ... <-- same in both approaches
API 11+ abordagem
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
... MainActivity extends Activity ...
... = getFragmentManager();
.... YourFragment extends Fragment ... <-- same in both approaches
Então, se você tem um projeto que é escrito utilizando uma abordagem acima, e a integração de código a partir de outro local, certifique-se de olhar para essas linhas, e alterá-las para coincidir com o que você tem.
É simples.
Se você também quer que seu aplicativo para ser executado em dispositivos mais antigos (abaixo do nível da API 11), use getSupportFragmentManager()
.
Se você deseja que seu aplicativo para ser executado em dispositivos com o API de Nível acima de 11, em seguida, usar
getFragmentManger()
.