findViewById restituisce NULL quando si usa Fragment

Sono nuovo per lo sviluppo di Android e, naturalmente, su Frammenti.

Voglio accedere ai controlli del mio frammento nell’attività principale ma ‘findViewById’ restituisce null. senza frammenti il ​​codice funziona bene.

Ecco parte del mio codice:

Il frammento :

     

il onCreate di MainActivity:

  @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.main); this.initialisePaging(); EditText txtXML = (EditText) findViewById(R.id.txtXML);} 

su questo punto il txtXML è nullo.

Cosa manca nel mio codice o cosa dovrei fare?

Solutions Collecting From Web of "findViewById restituisce NULL quando si usa Fragment"

Prova così sui tuoi frammenti su onCreateView

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { return null; } LinearLayout ll = (LinearLayout )inflater.inflate(R.layout.tab_frag1_layout, container, false); EditText txtXML = (EditText) ll.findViewById(R.id.txtXML); return ll; } 

Dovresti inflate il layout del frammento sul metodo onCreateView di Fragment quindi puoi semplicemente accedere agli elementi con findViewById sulla tua Activity .

In questo esempio, il layout del mio frammento è un LinearLayout, quindi lancio il risultato della gittata su LinearLayout.

  public class FrgResults extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //some code LinearLayout ll = (LinearLayout)inflater.inflate(R.layout.frg_result, container, false); //some code return ll; } } 

Sono in ritardo, ma per chiunque altro abbia questo problema. Dovresti gonfiare la tua vista nel metodo onCreateView. Quindi eseguire l’override del metodo onCreateActivity ed è ansible utilizzare getView().findViewById lì.

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

Non puoi accedere alla vista del frammento nella class di attività di findViewById invece quello che puoi fare è …

Devi avere un object della class Fragment nel tuo file di attività, giusto? crea il metodo getter della class EditText in quella class framment e accedi a quel metodo nella tua attività.

creare una richiamata nella class Fragment sull’evento in cui è necessario l’object Edittext.

1) Prova questo:

Menu Eclipse -> Progetto -> Pulisci …

aggiornare

2) Se hai 2 o più istanze di layout ‘principale’, controlla se tutte hanno una vista con l’ID ‘txtXML’

3)

Un frammento è una parte dell’interfaccia utente o di un comportamento dell’applicazione che può essere inserita in un’attività. L’interazione con i frammenti avviene tramite FragmentManager, che può essere ottenuto tramite Activity.getFragmentManager () e Fragment.getFragmentManager ().

La class Fragment può essere utilizzata in molti modi per ottenere un’ampia varietà di risultati. È fondamentale, rappresenta una particolare operazione o interfaccia in esecuzione in un’attività più ampia. Un frammento è strettamente legato all’attività in cui si trova e non può essere utilizzato separatamente da uno. Sebbene Fragment definisca il proprio ciclo di vita, quel ciclo di vita dipende dalla sua attività: se l’attività viene interrotta, non è ansible avviare alcun frammento all’interno di esso; quando l’attività viene distrutta, tutti i frammenti verranno distrutti.

Studia questo devi usare FragmentManager.

Se si desidera utilizzare findViewById come si utilizza nelle attività onCreate, è ansible semplicemente mettere tutto in override su onCreativeCreated.