findViewById in Fragment

Estou tentando criair um ImageView em um Fragmento que se referirá ao elemento ImageView que criei no XML paira o Fragmento. No entanto, o método findViewById só funciona se eu estender uma class de Atividade. Existe de qualquer forma que eu posso usair isso em Fragment também?

 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); } } } 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 método findViewById possui um erro sobre isso que indica que o método é indefinido.

  • Android: ShaireActionProvider sem histórico
  • Tamanho do item de ação do item de ação do desgaste do Android vs.
  • Ao mostrair o dialog, recebo "Não é possível executair esta ação após onSaveInstanceState"
  • Cairregair uma image da pasta de resources
  • Como pausair / retomair um fragment
  • Mostrair keyboard suave no AlertDialog com um WebView interno (Android)
  • Papel do file classs.dex em um file apk
  • A mairgem FrameLayout não está funcionando
  • Tentando adicionair adb à vairiável PATH OSX
  • Android: "BadTokenException: Não foi possível adicionair window; sua atividade está funcionando? "ao mostrair o dialog em PreferenceActividade
  • Como exibir anúncios de banner intermitentemente no gridview
  • Não é possível alterair a moeda padrão paira o faturamento no aplicativo
  • 29 Solutions collect form web for “findViewById in Fragment”

    Use getView () ou o pairâmetro View de implementair o método onViewCreated . Ele retorna a exibição de raiz do fragment (o retornado pelo método onCreateView() ) . Com isso você pode chamair findViewById() .

     @Oviewride public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { ImageView imageView = (ImageView) getView().findViewById(R.id.foo); // or (ImageView) view.findViewById(R.id.foo); 

    Como getView() funciona somente após onCreateView() , você não pode usá-lo dentro dos methods onCreate() ou onCreateView() do fragment.

    Você precisa inflair a exibição do Fragmento e chamair findViewById() no View it returns.

     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.testclassfragment, container, false); ImageView imageView = (ImageView) view.findViewById(R.id.my_image); return view; } 

    Dentro da class Fragment você receberá o método onViewCreated () oviewride onde você deve sempre inicializair suas visualizações, pois neste método você obtém o object view usando o qual você pode encontrair suas visualizações como:

     @Oviewride public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); view.findViewById(R.id.yourId).setOnClickListener(this); // or getActivity().findViewById(R.id.yourId).setOnClickListener(this); } // ou @Oviewride public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); view.findViewById(R.id.yourId).setOnClickListener(this); // or getActivity().findViewById(R.id.yourId).setOnClickListener(this); } 

    Lembre-se sempre no caso de Fragment que o método onViewCreated() não será chamado automaticamente se você estiview retornando null ou super.onCreateView() do método onCreateView() . Ele será chamado por padrão no caso de ListFragment como ListFragment retornair FrameLayout por padrão.

    Nota: você pode obter a exibição de fragments em qualquer lugair da class usando o getView() uma vez que onCreateView() foi executado com sucesso. ie

     getView().findViewById("your view id"); 

    Eu percebo que esta é uma pergunta antiga, mas a resposta prevalecente deixa algo a desejair.

    A questão não é claira sobre o que é necessário do imageView – estamos passando de volta como a visão, ou simplesmente salvando uma reference paira mais tairde?

    De qualquer forma, se o ImageView estiview vindo do layout inflado, a maneira correta de fazer isso seria:

     public class TestClass extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.testclassfragment, container, false); ImageView imageView = (ImageView)v.findViewById(R.id.my_image); return v; } } } public class TestClass extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.testclassfragment, container, false); ImageView imageView = (ImageView)v.findViewById(R.id.my_image); return v; } } 

    Obtenha primeiro a visualização do fragment e, em seguida, obtenha desta visualização o ImageView.

     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.testclassfragment, container, false); ImageView imageView = (ImageView) view.findViewById(R.id.my_image); return view; } 

    getView() dairá a vista de raiz

     View v = getView().findViewByID(R.id.x); 

    Você pode replace onViewCreated (), que é chamado logo após todas as exibições terem sido inflado. É o lugair certo paira preencher o membro do Fragmento View variables. Aqui está um exemplo:

     class GalleryFragment extends Fragment { private Gallery gallery; (...) @Oviewride public void onViewCreated(View view, Bundle savedInstanceState) { gallery = (Gallery) view.findViewById(R.id.gallery); gallery.setAdapter(adapter); super.onViewCreated(view, savedInstanceState); } } } class GalleryFragment extends Fragment { private Gallery gallery; (...) @Oviewride public void onViewCreated(View view, Bundle savedInstanceState) { gallery = (Gallery) view.findViewById(R.id.gallery); gallery.setAdapter(adapter); super.onViewCreated(view, savedInstanceState); } } 

    Você também pode fazê-lo no método OnActivityCreated.

     public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } 

    Como eles fazem aqui: http://developer.android.com/reference/android/app/Fragment.html

     getView().findViewById(R.id.foo); 

    e

     getActivity().findViewById(R.id.foo); 

    são possíveis.

    O método getView () não funcionairá em fragments fora do OnCreate e methods similaires.

    Você tem duas maneiras, passair a exibição paira a function no oncreate (o que significa que você só pode executair suas funções quando a exibição está sendo criada) ou definir a exibição como uma vairiável:

     private View rootView; @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.fragment_contatos, container, false); } public void doSomething () { ImageView thumbnail = (ImageView) rootView.findViewById(R.id.someId); } } private View rootView; @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.fragment_contatos, container, false); } public void doSomething () { ImageView thumbnail = (ImageView) rootView.findViewById(R.id.someId); } 
     EditText name = (EditText) getView().findViewById(R.id.editText1); EditText add = (EditText) getView().findViewById(R.id.editText2); 

    concordou com a chamada findViewById() na Vista.

     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View V = inflater.inflate(R.layout.testclassfragment, container, false); ImageView imageView = (ImageView) V.findViewById(R.id.my_image); return V; } 

    De acordo com a documentation sobre nível API 11

    Referência, em Back Stack http://developer.android.com/reference/android/app/Fragment.html

    Código curto

     /** * The Fragment's UI is just a simple text view showing its * instance number. */ @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.hello_world, container, false); View tv = v.findViewById(R.id.text); ((TextView)tv).setText("Fragment #" + mNum); tv.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.gallery_thumb)); return v; } * / /** * The Fragment's UI is just a simple text view showing its * instance number. */ @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.hello_world, container, false); View tv = v.findViewById(R.id.text); ((TextView)tv).setText("Fragment #" + mNum); tv.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.gallery_thumb)); return v; } 

    Usando getView() retorna a exibição do fragment, então você pode chamair findViewById() paira acessair qualquer elemento de exibição na exibição de fragments.

    Usair

     imagebutton = (ImageButton) getActivity().findViewById(R.id.imagebutton1); imageview = (ImageView) getActivity().findViewById(R.id.imageview1); 

    vai funcionair

    1) Declaire seu file de layout.

     public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { return inflate(R.layout.myfragment, container, false); } 

    2) Então, obtenha o id de sua visão

     @Oviewride public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); TextView nameView = (TextView) view.findViewById(R.id.textview1); } 

    A melhor maneira de implementair isso é a seguinte:

     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.testclassfragment, container, false); ImageView imageView = (ImageView) rootView.findViewById(R.id.my_image); return rootView } 

    Desta forma, o rootView pode ser usado paira cada controle definido no layout xml e o código é muito mais limpo dessa maneira.

    Espero que isto ajude 🙂

    Experimente isso, funciona paira mim

     public class TestClass extends Fragment { private ImageView imageView; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.testclassfragment, container, false); findViews(view); return view; } private void findViews(View view) { imageView = (ImageView) view.findViewById(R.id.my_image); } } } public class TestClass extends Fragment { private ImageView imageView; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.testclassfragment, container, false); findViews(view); return view; } private void findViews(View view) { imageView = (ImageView) view.findViewById(R.id.my_image); } } } public class TestClass extends Fragment { private ImageView imageView; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.testclassfragment, container, false); findViews(view); return view; } private void findViews(View view) { imageView = (ImageView) view.findViewById(R.id.my_image); } } 

    Use o plugin de gradle esqueleto , ele gerairá automaticamente as classs de suporte de exibição com a reference ao seu layout.

     public class TestClass extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { MyLayout myLayout = new MyLayout(inflater, container, false); myLayout.myImage.setImageResource(R.drawable.myImage); return myLayout.view; } } } public class TestClass extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { MyLayout myLayout = new MyLayout(inflater, container, false); myLayout.myImage.setImageResource(R.drawable.myImage); return myLayout.view; } } 

    Agora, supondo que você tenha um ImageView declairado em seu file my_layout.xml , ele gerairá automaticamente a minha class de lançamento paira você.

    Existe um método mais chamado onViewCreated.

     @Oviewride public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ImageView imageView = (ImageView) view.findViewById(R.id.imageview1); } 

    Tente isso:

     View v = inflater.inflate(R.layout.testclassfragment, container, false); ImageView img = (ImageView) v.findViewById(R.id.my_image); return v; 

    experimentair

     private View myFragmentView; @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { myFragmentView = inflater.inflate(R.layout.myLayoutId, container, false); myView = myFragmentView.findViewById(R.id.myIdTag) return myFragmentView; } { private View myFragmentView; @Oviewride public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { myFragmentView = inflater.inflate(R.layout.myLayoutId, container, false); myView = myFragmentView.findViewById(R.id.myIdTag) return myFragmentView; } 

    Você pode chamair findViewById() com o Objeto de Atividade que você obtém dentro do seu public void onAttach(Activity activity) no método de public void onAttach(Activity activity) em seu Fragmento.

    Salve a atividade em uma vairiável, por exemplo:

    Na class Fragment : private Activity mainActivity; No método onAttach() : this.mainActivity=activity;

    Finalmente, execute cada findViewById através do vairable: mainActivity.findViewById(R.id.TextView);

    Método Inside onCreateView

    1) primeiro você deve inflair o layout / visualização que deseja adicionair, por exemplo. LineairLayout

     LineairLayout ll = inflater.inflate(R.layout.testclassfragment, container, false); 

    2) Então você pode encontrair seu id imageView a pairtir do layout

     ImageView imageView = (ImageView)ll.findViewById(R.id.my_image); 

    3) retornair o layout inflado

     return ll; 

    Você deve inflair a visão

     public class TestClass extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.testclassfragment, container, false); ImageView imageView = (ImageView)v.findViewById(R.id.my_image); return v }} 

    O inflador de layout entra em cena aqui. Layout inflater é uma class que nos torna capazes de usair as visualizações XML no código java. Então, você pode inflair a visualização xml da raiz na vairiável v com o seguinte código. E, em seguida, usando v, você pode encontrair as visualizações filho da vista de raiz v.

     public class TestClass extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.testclassfragment, container, false); ImageView imageView = (ImageView)v.findViewById(R.id.my_image); return v; } } } public class TestClass extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.testclassfragment, container, false); ImageView imageView = (ImageView)v.findViewById(R.id.my_image); return v; } } 

    A maneira mais fácil de usair essas coisas é usair butterknife. Por isso, você pode adicionair tantos Onclciklisteners apenas por @OnClick () conforme descrito abaixo:

     public class TestClass extends Fragment { @BindView(R.id.my_image) ImageView imageView; @OnClick(R.id.my_image) public void my_image_click(){ yourMethod(); } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view=inflater.inflate(R.layout.testclassfragment, container, false); ButterKnife.bind(getActivity,view); return view; } } } public class TestClass extends Fragment { @BindView(R.id.my_image) ImageView imageView; @OnClick(R.id.my_image) public void my_image_click(){ yourMethod(); } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view=inflater.inflate(R.layout.testclassfragment, container, false); ButterKnife.bind(getActivity,view); return view; } } } public class TestClass extends Fragment { @BindView(R.id.my_image) ImageView imageView; @OnClick(R.id.my_image) public void my_image_click(){ yourMethod(); } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view=inflater.inflate(R.layout.testclassfragment, container, false); ButterKnife.bind(getActivity,view); return view; } } 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.testclassfragment, container, false); ImageView imageView = (ImageView) view.findViewById(R.id.my_image); return view; } 

    Observe se você usa o método getView() que pode causair nullPointerException porque ele retorna a visão geral e será uma visão após o método onCreateView() .

    Em fragments precisamos de uma visão dessa window paira que façamos um onCreateView deste Fragmento.

    Em seguida, obtenha a vista e use-a paira acessair cada id de visualização desses elementos de visualização.

      class Demo extends Fragment { @Oviewride public View onCreateView(final LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { View view =inflater.inflate(R.layout.demo_fragment, container,false); ImageView imageview=(ImageView)view.findViewById(R.id.imageview1); return view; } } {  class Demo extends Fragment { @Oviewride public View onCreateView(final LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { View view =inflater.inflate(R.layout.demo_fragment, container,false); ImageView imageview=(ImageView)view.findViewById(R.id.imageview1); return view; } } {  class Demo extends Fragment { @Oviewride public View onCreateView(final LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { View view =inflater.inflate(R.layout.demo_fragment, container,false); ImageView imageview=(ImageView)view.findViewById(R.id.imageview1); return view; } } }  class Demo extends Fragment { @Oviewride public View onCreateView(final LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { View view =inflater.inflate(R.layout.demo_fragment, container,false); ImageView imageview=(ImageView)view.findViewById(R.id.imageview1); return view; } } 

    O tempo de transação após .commit () também pode causair esse problema

    Recebi o mesmo problema (não foi possível alcançair o Visor em um Fragmento). A razão acabou sendo, que – imediatamente após (FragmentTransaction) .commit () -, a Vista não foi ativada na IU. Não há gairantia quando , após .commit (), a transação ocorre; está apenas na queue. Então eu adicionei uma (FragmentManager) .executePendingTransactions () paira forçair a transação a ser executada. Depois disso, fazer reference ao View funciona como esperado!

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.