Estou tentando criar um ImageView em um fragmento que se refere ao elemento ImageView que eu criei no XML para o fragmento. No entanto, o findViewById
método só funciona se eu estender uma classe Activity. Existe alguma maneira de que eu possa usá-lo também no Fragment?
public class TestClass extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ImageView imageView = (ImageView)findViewById(R.id.my_image);
return inflater.inflate(R.layout.testclassfragment, container, false);
}
}
O findViewById
método possui um erro que indica que o método é indefinido.
android
android-fragments
android-imageview
findviewbyid
simplificado.
fonte
fonte
Respostas:
Use getView () ou o parâmetro View da implementação do
onViewCreated
método. Retorna a visualização raiz do fragmento (aquele retornado peloonCreateView()
método) . Com isso você pode ligarfindViewById()
.Como
getView()
funciona somente depoisonCreateView()
, você não pode usá-lo dentroonCreate()
ou nosonCreateView()
métodos do fragmento.fonte
ImageView
layout for inflado - veja minha resposta para obter detalhes. Caso contrário, onCreateView é o lugar certo para fazer isso @ N-AccessDevonActivityCreated()
é o local recomendado para encontrar e armazenar referências às suas visualizações. Você deve limpar essas referências armazenadas configurando-as novamente paranull
dentroonDestroyView()
ou poderá vazar o arquivoActivity
.Você precisa aumentar a exibição do fragmento e chamar
findViewById()
oView
retorno.fonte
NullPointerException
.Dentro da
Fragment
classe, você obterá o método de substituição onViewCreated () , onde você deve sempre inicializar suas visualizações, pois neste método você obtém o objeto de exibição usando o qual pode encontrar suas visualizações como:Lembre-se sempre, no caso de Fragment, de que o
onViewCreated()
método não será chamado automaticamente se você retornar nulo ousuper.onCreateView()
doonCreateView()
método. Ele será chamado por padrão em caso deListFragment
comoListFragment
retornoFrameLayout
por padrão.Nota: você pode obter a visualização do fragmento em qualquer lugar da classe usando
getView()
uma vez queonCreateView()
tenha sido executado com êxito. iefonte
view
passado paraonViewCreated
causas estáticas,NullPointerException
mas usargetActivity()
é bom. Alguma idéia do porquê?onCreateView
método. Acabei de depurar e verifica-se que há um layout (no meu casoFrameLayout
). Dito isto, quando tento encontrar um elemento, ele retornanull
. Por que isso está acontecendo?Sei que essa é uma pergunta antiga, mas a resposta predominante deixa algo a desejar.
A questão não está clara do que é necessário
imageView
- estamos passando de volta como visão ou apenas guardando uma referência para mais tarde?De qualquer maneira, se o resultado
ImageView
for do layout inflado, a maneira correta de fazer isso seria:fonte
Obtenha primeiro a visualização do fragmento e, a partir dessa visualização, seu ImageView.
fonte
Você também pode fazer isso no
onActivityCreated
métodoComo eles fazem aqui: http://developer.android.com/reference/android/app/Fragment.html (descontinuado no nível 28 da API)
e
e possivel.
fonte
getView()
dará a visão raizfonte
Você pode substituir onViewCreated (), que é chamado logo após todas as visualizações terem sido infladas. É o lugar certo para preencher as
View
variáveis de membro do seu fragmento . Aqui está um exemplo:fonte
Dentro da
Fragment
classe, obtemos oonViewCreated()
método override, onde devemos sempre inicializar nossas visualizações, porque nesse método obtemos oview
objeto. Usando este objeto, podemos encontrar nossos pontos de vista como abaixo:fonte
O método getView () não funcionará em fragmentos fora do OnCreate e métodos similares.
Você tem duas maneiras: passar a visualização para a função oncreate (o que significa que você só pode executar suas funções quando a visualização estiver sendo criada) ou definir a visualização como uma variável:
fonte
1) primeiro inflar o layout do Fragment, então você pode usar o findviewbyId.
fonte
fonte
Usar
vai funcionar
fonte
concordou em invocar
findViewById()
a Visão.fonte
Nota :
No nível 26 da API, você também não precisa converter especificamente o resultado de findViewById, pois ele usa inferência para seu tipo de retorno.
Então agora você pode simplesmente fazer,
fonte
De acordo com a documentação no nível 11 da API
Referência, em Back Stack http://developer.android.com/reference/android/app/Fragment.html
Código curto
fonte
Using
getView()
retorna a visão do fragmento, então você pode chamarfindViewById()
para acessar qualquer elemento de visão na visão de fragmento.fonte
Tente isso, funciona para mim
fonte
A melhor maneira de implementar isso é a seguinte:
Dessa maneira, o rootView pode ser usado para cada controle definido no layout xml e o código é muito mais limpo dessa maneira.
Espero que isto ajude :)
fonte
1) Declare seu arquivo de layout.
2) Em seguida, obtenha o ID da sua visualização
fonte
Use o plug- in gradle skeleton , ele gerará automaticamente as classes de suporte de exibição com a referência ao seu layout.
Agora, supondo que você tenha um
ImageView
declarado em seumy_layout.xml
arquivo, ele gerará automaticamente a classe myLayout para você.fonte
Tente isto:
fonte
tentar
fonte
getView()
mais tardeVocê pode chamar
findViewById()
com o Objeto de Atividade que você obtém dentro do seupublic void onAttach(Activity activity)
método dentro do seu Fragmento.Salve a atividade em uma variável, por exemplo:
Na classe Fragment :
private Activity mainActivity;
NoonAttach()
método:this.mainActivity=activity;
Por fim, execute cada findViewById através do variável:
mainActivity.findViewById(R.id.TextView);
fonte
Há mais um método chamado onViewCreated.
fonte
Método interno onCreateView
1) primeiro você precisa aumentar o layout / visualização que deseja adicionar, por exemplo. LinearLayout
2) Em seguida, você pode encontrar seu ID do imageView no layout
3) retorne o layout inflado
fonte
Você tem que aumentar a vista
fonte
Nos fragmentos, precisamos de uma visualização dessa janela para fazer um onCreateView desse fragmento.
Em seguida, obtenha a visualização e use-a para acessar todo e qualquer ID de visualização dos elementos da visualização.
fonte
O inflator de layout entra em cena aqui. O inflator de layout é uma classe que nos permite usar as visualizações XML no código java. Portanto, você pode aumentar a visualização xml raiz na variável v com o seguinte código. E, em seguida, usando v, você pode encontrar as visualizações filho da visualização raiz v.
fonte
A maneira mais fácil de usar essas coisas é usar o canivete. Com isso, você pode adicionar quantos Onclciklisteners apenas por @OnClick (), conforme descrito abaixo:
fonte