Como adicionar um fragmento a uma atividade com uma visão programática do conteúdo criado
Quero adicionar um Fragmento a uma Actividade que implemente o seu layout de forma programática. Eu olhei a documentação do Fragmento, mas existem't muitos exemplos descrevendo o que eu preciso. Aqui está o tipo de código que eu tentei escrever:
public class DebugExampleTwo extends Activity {
private ExampleTwoFragment mFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout frame = new FrameLayout(this);
if (savedInstanceState == null) {
mFragment = new ExampleTwoFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(frame.getId(), mFragment).commit();
}
setContentView(frame);
}
}
...
public class ExampleTwoFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
Button button = new Button(getActivity());
button.setText("Hello There");
return button;
}
}
Este código compila mas falha no início, provavelmente porque o meu FragmentTransaction.add()
está incorreto. Qual é a maneira correta de fazer isso?
224
3
Acontece que há mais do que um problema com esse código. Um fragmento não pode ser declarado dessa forma, dentro do mesmo arquivo java da atividade, mas não como uma classe interna pública. O framework espera que o construtor do fragmento's (sem parâmetros) seja público e visível. Movendo o fragmento para a Activity como uma classe interna, ou criando um novo arquivo java para o fragmento, corrige isso.
A segunda questão é que quando você'estiver adicionando um fragmento desta forma, você deve passar uma referência ao fragmento's contendo a view, e essa view deve ter uma identificação personalizada. Usando o id padrão irá travar o aplicativo. Aqui's o código atualizado:
Aqui está o que eu descobri depois de ler Tony Wong's comment:
...
...
Kotlin
Se você estiver usando o Kotlin, certifique-se de dar uma olhada no que as extensões Kotlin do Google fornecem ou apenas escreva a sua própria.
utilizar