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>
Foi útil?

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().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top